grpc 1.47.0-x86_64-linux → 1.49.0.pre1-x86_64-linux

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 (1059) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +183 -62
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/event_engine.h +37 -25
  5. data/include/grpc/event_engine/slice_buffer.h +8 -2
  6. data/include/grpc/grpc.h +3 -3
  7. data/include/grpc/impl/codegen/compression_types.h +2 -1
  8. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  9. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  10. data/include/grpc/impl/codegen/grpc_types.h +5 -9
  11. data/include/grpc/impl/codegen/port_platform.h +2 -7
  12. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  13. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +20 -8
  14. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +18 -2
  15. data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
  16. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
  18. data/src/core/ext/filters/client_channel/client_channel.cc +164 -261
  19. data/src/core/ext/filters/client_channel/client_channel.h +34 -12
  20. data/src/core/ext/filters/client_channel/client_channel_factory.cc +0 -29
  21. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -10
  22. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  23. data/src/core/ext/filters/client_channel/config_selector.h +13 -5
  24. data/src/core/ext/filters/client_channel/connector.h +5 -6
  25. data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
  26. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  27. data/src/core/ext/filters/client_channel/http_proxy.cc +53 -65
  28. data/src/core/ext/filters/client_channel/http_proxy.h +12 -9
  29. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
  30. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +14 -12
  31. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +6 -6
  32. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
  33. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +170 -164
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +13 -4
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +5 -1
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +1 -0
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -2
  39. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
  40. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  41. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +200 -96
  42. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +25 -1
  43. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +121 -131
  44. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +153 -116
  45. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +220 -181
  46. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +10 -6
  47. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +110 -119
  48. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +133 -117
  49. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +97 -87
  50. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +114 -131
  51. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +40 -49
  52. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +84 -102
  53. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +64 -76
  54. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +172 -103
  55. data/src/core/ext/filters/client_channel/proxy_mapper.h +13 -14
  56. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +18 -16
  57. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +8 -7
  58. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +7 -9
  59. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +434 -148
  60. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
  61. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +179 -103
  62. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +20 -7
  63. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -18
  64. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +8 -18
  65. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +11 -0
  66. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +16 -18
  67. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +4 -5
  68. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +5 -6
  69. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -13
  70. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +181 -175
  71. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  72. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +39 -32
  73. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +7 -10
  74. data/src/core/ext/filters/client_channel/retry_filter.cc +35 -43
  75. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  76. data/src/core/ext/filters/client_channel/retry_service_config.cc +30 -19
  77. data/src/core/ext/filters/client_channel/retry_service_config.h +6 -9
  78. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +7 -7
  79. data/src/core/ext/filters/client_channel/subchannel.cc +101 -138
  80. data/src/core/ext/filters/client_channel/subchannel.h +14 -30
  81. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +1 -1
  82. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
  83. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -25
  84. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +15 -101
  85. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
  86. data/src/core/ext/filters/deadline/deadline_filter.cc +18 -13
  87. data/src/core/ext/filters/deadline/deadline_filter.h +8 -2
  88. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +20 -3
  89. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +9 -4
  90. data/src/core/ext/filters/fault_injection/service_config_parser.cc +19 -11
  91. data/src/core/ext/filters/fault_injection/service_config_parser.h +19 -6
  92. data/src/core/ext/filters/http/client/http_client_filter.cc +17 -7
  93. data/src/core/ext/filters/http/client/http_client_filter.h +9 -2
  94. data/src/core/ext/filters/http/client_authority_filter.cc +11 -11
  95. data/src/core/ext/filters/http/client_authority_filter.h +6 -3
  96. data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
  97. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
  98. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  99. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
  100. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  101. data/src/core/ext/filters/http/server/http_server_filter.cc +17 -11
  102. data/src/core/ext/filters/http/server/http_server_filter.h +7 -2
  103. data/src/core/ext/filters/message_size/message_size_filter.cc +37 -21
  104. data/src/core/ext/filters/message_size/message_size_filter.h +13 -3
  105. data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
  106. data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
  107. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +25 -10
  108. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +15 -5
  109. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
  110. data/src/core/ext/filters/server_config_selector/server_config_selector.h +14 -0
  111. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +23 -5
  112. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
  113. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +39 -66
  114. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +77 -104
  115. data/src/core/ext/transport/chttp2/server/chttp2_server.h +4 -6
  116. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +320 -635
  117. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +4 -3
  118. data/src/core/ext/transport/chttp2/transport/flow_control.cc +207 -262
  119. data/src/core/ext/transport/chttp2/transport/flow_control.h +177 -289
  120. data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
  121. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
  122. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
  123. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
  124. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
  125. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +25 -8
  126. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -0
  127. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -1
  128. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +8 -2
  129. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +9 -16
  130. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
  131. data/src/core/ext/transport/chttp2/transport/internal.h +11 -112
  132. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
  133. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
  134. data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
  135. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
  136. data/src/core/ext/transport/inproc/inproc_transport.cc +124 -154
  137. data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
  138. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
  139. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
  140. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +4 -4
  141. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +24 -8
  142. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
  143. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
  144. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
  145. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
  146. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
  147. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
  148. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
  149. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
  150. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
  151. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
  152. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
  153. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
  154. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
  155. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
  156. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
  157. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
  158. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  159. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
  160. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
  161. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
  162. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +21 -19
  163. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +124 -34
  164. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
  165. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
  166. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +23 -22
  167. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +153 -48
  168. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
  169. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
  170. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
  171. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
  172. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
  173. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
  174. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +7 -7
  175. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +42 -14
  176. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
  177. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
  178. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
  179. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
  180. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
  181. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
  182. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  183. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
  184. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
  185. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
  186. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
  187. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
  188. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
  189. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
  190. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +9 -9
  191. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +54 -18
  192. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
  193. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
  194. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +21 -20
  195. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +117 -44
  196. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  197. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
  198. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
  199. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
  200. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +6 -2
  201. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  202. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
  203. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
  204. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
  205. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
  206. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
  207. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +5 -5
  208. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +36 -12
  209. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
  210. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
  211. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
  212. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
  213. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +37 -13
  214. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +170 -15
  215. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
  216. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
  217. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +1 -1
  218. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +6 -2
  219. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
  220. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
  221. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
  222. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
  223. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
  224. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
  225. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
  226. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
  227. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +21 -9
  228. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +100 -14
  229. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -22
  230. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +36 -77
  231. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +121 -76
  232. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +647 -163
  233. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
  234. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
  235. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
  236. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
  237. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +1 -1
  238. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -2
  239. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
  240. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
  241. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
  242. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
  243. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
  244. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
  245. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
  246. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
  247. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
  248. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
  249. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
  250. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
  251. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
  252. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
  253. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
  254. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
  255. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
  256. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
  257. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +1 -1
  258. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +6 -2
  259. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
  260. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
  261. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
  262. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
  263. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
  264. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
  265. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
  266. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
  267. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +1 -1
  268. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +6 -2
  269. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +35 -27
  270. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +177 -52
  271. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  272. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +168 -0
  273. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  274. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
  275. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
  276. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
  277. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
  278. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
  279. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +5 -5
  280. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +42 -14
  281. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
  282. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
  283. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  284. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
  285. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +131 -16
  286. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +632 -12
  287. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
  288. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
  289. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
  290. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
  291. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
  292. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
  293. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
  294. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
  295. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
  296. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
  297. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
  298. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
  299. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
  300. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
  301. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  302. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
  303. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  304. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
  305. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
  306. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
  307. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
  308. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
  309. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
  310. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
  311. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  312. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
  313. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  314. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
  315. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
  316. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
  317. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
  318. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
  319. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
  320. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
  321. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
  322. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
  323. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
  324. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  325. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  326. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  327. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
  328. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
  329. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  330. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
  331. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
  332. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
  333. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
  334. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  335. data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
  336. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
  337. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
  338. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  339. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
  340. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
  341. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
  342. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  343. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
  344. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  345. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
  346. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
  347. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
  348. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  349. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
  350. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
  351. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
  352. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  353. data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
  354. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
  355. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
  356. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
  357. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
  358. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
  359. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
  360. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
  361. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  362. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
  363. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
  364. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
  365. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
  366. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
  367. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
  368. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
  369. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  370. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
  371. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  372. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
  373. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
  374. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  375. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
  376. data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
  377. data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
  378. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
  379. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
  380. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
  381. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
  382. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
  383. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
  384. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
  385. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
  386. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  387. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
  388. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
  389. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
  390. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  391. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
  392. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
  393. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
  394. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  395. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
  396. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  397. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
  398. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  399. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
  400. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +6 -2
  401. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +1 -1
  402. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +6 -2
  403. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
  404. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
  405. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
  406. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
  407. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
  408. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
  409. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -1
  410. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
  411. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
  412. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
  413. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
  414. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
  415. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
  416. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
  417. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
  418. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +156 -154
  419. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +186 -183
  420. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +136 -134
  421. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
  422. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +162 -139
  423. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  424. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
  425. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +12 -8
  426. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  427. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +72 -75
  428. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +0 -5
  429. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +713 -670
  430. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
  431. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
  432. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
  433. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
  434. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  435. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
  436. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
  437. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +477 -466
  438. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
  439. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +153 -84
  440. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
  441. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
  442. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
  443. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  444. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  445. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
  446. data/src/core/ext/xds/certificate_provider_factory.h +6 -1
  447. data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
  448. data/src/core/ext/xds/certificate_provider_registry.h +3 -1
  449. data/src/core/ext/xds/certificate_provider_store.cc +2 -0
  450. data/src/core/ext/xds/certificate_provider_store.h +9 -0
  451. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
  452. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
  453. data/src/core/ext/xds/upb_utils.h +0 -22
  454. data/src/core/ext/xds/xds_api.cc +68 -103
  455. data/src/core/ext/xds/xds_api.h +30 -32
  456. data/src/core/ext/xds/xds_bootstrap.cc +69 -69
  457. data/src/core/ext/xds/xds_bootstrap.h +37 -19
  458. data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
  459. data/src/core/ext/xds/xds_certificate_provider.h +25 -1
  460. data/src/core/ext/xds/xds_channel_stack_modifier.cc +15 -4
  461. data/src/core/ext/xds/xds_channel_stack_modifier.h +13 -1
  462. data/src/core/ext/xds/xds_client.cc +583 -1193
  463. data/src/core/ext/xds/xds_client.h +28 -42
  464. data/src/core/ext/xds/xds_client_grpc.cc +291 -0
  465. data/src/core/ext/xds/xds_client_grpc.h +102 -0
  466. data/src/core/ext/xds/xds_client_stats.cc +3 -4
  467. data/src/core/ext/xds/xds_client_stats.h +4 -3
  468. data/src/core/ext/xds/xds_cluster.cc +107 -107
  469. data/src/core/ext/xds/xds_cluster.h +14 -5
  470. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +23 -18
  471. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +2 -8
  472. data/src/core/ext/xds/xds_common_types.cc +161 -123
  473. data/src/core/ext/xds/xds_common_types.h +16 -9
  474. data/src/core/ext/xds/xds_endpoint.cc +95 -85
  475. data/src/core/ext/xds/xds_endpoint.h +16 -8
  476. data/src/core/ext/xds/xds_http_fault_filter.cc +11 -16
  477. data/src/core/ext/xds/xds_http_fault_filter.h +5 -3
  478. data/src/core/ext/xds/xds_http_filters.cc +7 -0
  479. data/src/core/ext/xds/xds_http_filters.h +5 -5
  480. data/src/core/ext/xds/xds_http_rbac_filter.cc +52 -55
  481. data/src/core/ext/xds/xds_http_rbac_filter.h +8 -1
  482. data/src/core/ext/xds/xds_lb_policy_registry.cc +288 -0
  483. data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
  484. data/src/core/ext/xds/xds_listener.cc +355 -307
  485. data/src/core/ext/xds/xds_listener.h +13 -4
  486. data/src/core/ext/xds/xds_resource_type.h +16 -5
  487. data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
  488. data/src/core/ext/xds/xds_route_config.cc +215 -184
  489. data/src/core/ext/xds/xds_route_config.h +39 -16
  490. data/src/core/ext/xds/xds_routing.cc +19 -6
  491. data/src/core/ext/xds/xds_routing.h +12 -9
  492. data/src/core/ext/xds/xds_server_config_fetcher.cc +124 -81
  493. data/src/core/ext/xds/xds_transport.h +86 -0
  494. data/src/core/ext/xds/xds_transport_grpc.cc +349 -0
  495. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  496. data/src/core/lib/address_utils/parse_address.cc +24 -25
  497. data/src/core/lib/address_utils/parse_address.h +11 -7
  498. data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
  499. data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
  500. data/src/core/lib/avl/avl.h +47 -25
  501. data/src/core/lib/backoff/backoff.cc +1 -1
  502. data/src/core/lib/backoff/backoff.h +1 -1
  503. data/src/core/lib/channel/call_tracer.h +4 -4
  504. data/src/core/lib/channel/channel_args.cc +88 -19
  505. data/src/core/lib/channel/channel_args.h +114 -62
  506. data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
  507. data/src/core/lib/channel/channel_fwd.h +26 -0
  508. data/src/core/lib/channel/channel_stack.cc +4 -5
  509. data/src/core/lib/channel/channel_stack.h +1 -11
  510. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  511. data/src/core/lib/channel/channel_stack_builder.h +4 -7
  512. data/src/core/lib/channel/channel_stack_builder_impl.cc +3 -5
  513. data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
  514. data/src/core/lib/channel/channelz.cc +28 -37
  515. data/src/core/lib/channel/channelz.h +11 -3
  516. data/src/core/lib/channel/channelz_registry.cc +4 -5
  517. data/src/core/lib/channel/connected_channel.cc +1 -0
  518. data/src/core/lib/channel/connected_channel.h +1 -0
  519. data/src/core/lib/channel/promise_based_filter.cc +11 -5
  520. data/src/core/lib/channel/promise_based_filter.h +2 -1
  521. data/src/core/lib/compression/compression.cc +6 -1
  522. data/src/core/lib/compression/compression_internal.cc +3 -6
  523. data/src/core/lib/compression/compression_internal.h +3 -2
  524. data/src/core/lib/compression/message_compress.cc +3 -1
  525. data/src/core/lib/compression/message_compress.h +2 -3
  526. data/src/core/lib/config/core_configuration.h +48 -35
  527. data/src/core/lib/debug/stats.cc +15 -18
  528. data/src/core/lib/debug/stats.h +13 -4
  529. data/src/core/lib/debug/stats_data.cc +2 -1
  530. data/src/core/lib/debug/stats_data.h +0 -4
  531. data/src/core/lib/debug/trace.h +13 -12
  532. data/src/core/lib/event_engine/default_event_engine.cc +71 -0
  533. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine.h} +6 -10
  534. data/src/core/lib/event_engine/default_event_engine_factory.cc +20 -3
  535. data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
  536. data/src/core/lib/event_engine/executor/executor.h +38 -0
  537. data/src/core/lib/event_engine/executor/threaded_executor.cc +36 -0
  538. data/src/core/lib/event_engine/executor/threaded_executor.h +44 -0
  539. data/src/core/lib/event_engine/forkable.cc +98 -0
  540. data/src/core/lib/event_engine/forkable.h +61 -0
  541. data/src/core/lib/event_engine/poller.h +54 -0
  542. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +142 -0
  543. data/src/core/lib/event_engine/{iomgr_engine.h → posix_engine/posix_engine.h} +35 -32
  544. data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
  545. data/src/core/lib/event_engine/posix_engine/timer.h +193 -0
  546. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
  547. data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
  548. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +290 -0
  549. data/src/core/lib/event_engine/posix_engine/timer_manager.h +120 -0
  550. data/src/core/lib/event_engine/promise.h +78 -0
  551. data/src/core/lib/event_engine/socket_notifier.h +55 -0
  552. data/src/core/lib/event_engine/thread_pool.cc +158 -0
  553. data/src/core/lib/event_engine/thread_pool.h +81 -0
  554. data/src/core/lib/event_engine/utils.cc +49 -0
  555. data/src/core/lib/event_engine/utils.h +40 -0
  556. data/src/core/lib/event_engine/windows/iocp.cc +149 -0
  557. data/src/core/lib/event_engine/windows/iocp.h +68 -0
  558. data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
  559. data/src/core/lib/event_engine/windows/win_socket.h +120 -0
  560. data/src/core/lib/event_engine/windows/windows_engine.cc +159 -0
  561. data/src/core/lib/event_engine/windows/windows_engine.h +120 -0
  562. data/src/core/lib/gpr/time.cc +11 -9
  563. data/src/core/lib/gpr/time_posix.cc +6 -9
  564. data/src/core/lib/gpr/time_windows.cc +10 -7
  565. data/src/core/lib/gpr/useful.h +29 -0
  566. data/src/core/lib/gprpp/bitset.h +3 -13
  567. data/src/core/lib/gprpp/debug_location.h +39 -7
  568. data/src/core/lib/gprpp/manual_constructor.h +0 -68
  569. data/src/core/lib/gprpp/no_destruct.h +94 -0
  570. data/src/core/lib/gprpp/ref_counted_ptr.h +0 -1
  571. data/src/core/lib/gprpp/status_helper.cc +45 -30
  572. data/src/core/lib/gprpp/table.h +0 -1
  573. data/src/core/lib/gprpp/time.cc +8 -0
  574. data/src/core/lib/gprpp/time.h +4 -0
  575. data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
  576. data/src/core/lib/{iomgr → gprpp}/time_averaged_stats.h +29 -22
  577. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  578. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -28
  579. data/src/core/lib/http/format_request.cc +5 -4
  580. data/src/core/lib/http/format_request.h +1 -1
  581. data/src/core/lib/http/httpcli.cc +29 -35
  582. data/src/core/lib/http/httpcli.h +19 -3
  583. data/src/core/lib/http/httpcli_security_connector.cc +26 -14
  584. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
  585. data/src/core/lib/http/parser.cc +6 -7
  586. data/src/core/lib/http/parser.h +3 -0
  587. data/src/core/lib/iomgr/call_combiner.cc +2 -28
  588. data/src/core/lib/iomgr/closure.h +0 -9
  589. data/src/core/lib/iomgr/combiner.cc +0 -20
  590. data/src/core/lib/iomgr/endpoint.h +1 -1
  591. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
  592. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  593. data/src/core/lib/iomgr/error.cc +6 -777
  594. data/src/core/lib/iomgr/error.h +6 -147
  595. data/src/core/lib/iomgr/error_cfstream.cc +0 -5
  596. data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
  597. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  598. data/src/core/lib/iomgr/ev_poll_posix.cc +94 -61
  599. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  600. data/src/core/lib/iomgr/ev_posix.cc +54 -92
  601. data/src/core/lib/iomgr/ev_posix.h +5 -3
  602. data/src/core/lib/iomgr/exec_ctx.cc +0 -12
  603. data/src/core/lib/iomgr/executor.cc +0 -10
  604. data/src/core/lib/iomgr/executor.h +0 -3
  605. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  606. data/src/core/lib/iomgr/iomgr.cc +7 -0
  607. data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
  608. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
  609. data/src/core/lib/iomgr/load_file.cc +1 -1
  610. data/src/core/lib/iomgr/lockfree_event.cc +0 -17
  611. data/src/core/lib/iomgr/port.h +3 -0
  612. data/src/core/lib/iomgr/resolve_address.h +29 -6
  613. data/src/core/lib/iomgr/resolve_address_posix.cc +39 -9
  614. data/src/core/lib/iomgr/resolve_address_posix.h +19 -5
  615. data/src/core/lib/iomgr/resolve_address_windows.cc +41 -11
  616. data/src/core/lib/iomgr/resolve_address_windows.h +19 -5
  617. data/src/core/lib/iomgr/socket_windows.h +0 -2
  618. data/src/core/lib/iomgr/tcp_client.cc +12 -7
  619. data/src/core/lib/iomgr/tcp_client.h +24 -13
  620. data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
  621. data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
  622. data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
  623. data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
  624. data/src/core/lib/iomgr/tcp_posix.cc +207 -33
  625. data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
  626. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
  627. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
  628. data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
  629. data/src/core/lib/iomgr/tcp_windows.cc +5 -5
  630. data/src/core/lib/iomgr/timer_generic.cc +6 -8
  631. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
  632. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  633. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  634. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  635. data/src/core/lib/json/json.h +19 -22
  636. data/src/core/lib/json/json_args.h +34 -0
  637. data/src/core/lib/json/json_object_loader.cc +233 -0
  638. data/src/core/lib/json/json_object_loader.h +618 -0
  639. data/src/core/lib/json/json_reader.cc +86 -62
  640. data/src/core/lib/json/json_util.cc +8 -36
  641. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +3 -44
  642. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +15 -31
  643. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  644. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.cc +48 -73
  645. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.h +27 -27
  646. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +16 -24
  647. data/src/core/lib/matchers/matchers.cc +6 -3
  648. data/src/core/lib/matchers/matchers.h +2 -0
  649. data/src/core/lib/promise/activity.cc +0 -1
  650. data/src/core/lib/promise/activity.h +56 -14
  651. data/src/core/lib/promise/arena_promise.h +84 -81
  652. data/src/core/lib/promise/context.h +0 -1
  653. data/src/core/lib/promise/detail/basic_seq.h +43 -23
  654. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  655. data/src/core/lib/promise/loop.h +1 -0
  656. data/src/core/lib/promise/map.h +0 -1
  657. data/src/core/lib/promise/promise.h +1 -0
  658. data/src/core/lib/promise/seq.h +25 -4
  659. data/src/core/lib/promise/sleep.cc +43 -42
  660. data/src/core/lib/promise/sleep.h +31 -28
  661. data/src/core/lib/promise/try_seq.h +26 -6
  662. data/src/core/lib/resolver/resolver.cc +0 -42
  663. data/src/core/lib/resolver/resolver.h +5 -12
  664. data/src/core/lib/resolver/resolver_factory.h +6 -4
  665. data/src/core/lib/resolver/resolver_registry.cc +3 -10
  666. data/src/core/lib/resolver/resolver_registry.h +12 -2
  667. data/src/core/lib/resolver/server_address.cc +19 -15
  668. data/src/core/lib/resolver/server_address.h +11 -8
  669. data/src/core/lib/resource_quota/api.cc +1 -1
  670. data/src/core/lib/resource_quota/arena.cc +21 -1
  671. data/src/core/lib/resource_quota/arena.h +24 -2
  672. data/src/core/lib/resource_quota/memory_quota.cc +171 -73
  673. data/src/core/lib/resource_quota/memory_quota.h +109 -42
  674. data/src/core/lib/resource_quota/periodic_update.cc +79 -0
  675. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  676. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  677. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  678. data/src/core/lib/security/authorization/evaluate_args.cc +17 -8
  679. data/src/core/lib/security/authorization/evaluate_args.h +6 -3
  680. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
  681. data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
  682. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -1
  683. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +13 -2
  684. data/src/core/lib/security/authorization/matchers.cc +20 -9
  685. data/src/core/lib/security/authorization/matchers.h +7 -0
  686. data/src/core/lib/security/authorization/rbac_policy.cc +4 -0
  687. data/src/core/lib/security/authorization/rbac_policy.h +7 -0
  688. data/src/core/lib/security/context/security_context.cc +5 -2
  689. data/src/core/lib/security/context/security_context.h +14 -2
  690. data/src/core/lib/security/credentials/alts/alts_credentials.cc +6 -5
  691. data/src/core/lib/security/credentials/alts/alts_credentials.h +8 -4
  692. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  693. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  694. data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
  695. data/src/core/lib/security/credentials/call_creds_util.h +1 -0
  696. data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
  697. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
  698. data/src/core/lib/security/credentials/composite/composite_credentials.cc +5 -9
  699. data/src/core/lib/security/credentials/composite/composite_credentials.h +17 -5
  700. data/src/core/lib/security/credentials/credentials.cc +4 -8
  701. data/src/core/lib/security/credentials/credentials.h +26 -20
  702. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +45 -20
  703. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
  704. data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
  705. data/src/core/lib/security/credentials/external/external_account_credentials.cc +53 -29
  706. data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
  707. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +15 -8
  708. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  709. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +23 -9
  710. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
  711. data/src/core/lib/security/credentials/fake/fake_credentials.cc +10 -17
  712. data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -5
  713. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
  714. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +55 -35
  715. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -3
  716. data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -3
  717. data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
  718. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +7 -3
  719. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +7 -3
  720. data/src/core/lib/security/credentials/jwt/json_token.cc +17 -5
  721. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  722. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +12 -10
  723. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
  724. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +37 -14
  725. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
  726. data/src/core/lib/security/credentials/local/local_credentials.cc +7 -7
  727. data/src/core/lib/security/credentials/local/local_credentials.h +9 -3
  728. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +41 -29
  729. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
  730. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +7 -7
  731. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
  732. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +18 -21
  733. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +15 -3
  734. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
  735. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
  736. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
  737. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +15 -4
  738. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
  739. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
  740. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
  741. data/src/core/lib/security/credentials/tls/tls_credentials.cc +19 -26
  742. data/src/core/lib/security/credentials/tls/tls_credentials.h +7 -4
  743. data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
  744. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  745. data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -31
  746. data/src/core/lib/security/credentials/xds/xds_credentials.h +16 -2
  747. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +30 -18
  748. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
  749. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +42 -38
  750. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +3 -3
  751. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +13 -4
  752. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +21 -5
  753. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  754. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
  755. data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
  756. data/src/core/lib/security/security_connector/local/local_security_connector.cc +34 -13
  757. data/src/core/lib/security/security_connector/local/local_security_connector.h +7 -3
  758. data/src/core/lib/security/security_connector/security_connector.cc +20 -18
  759. data/src/core/lib/security/security_connector/security_connector.h +23 -9
  760. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +21 -8
  761. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  762. data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
  763. data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
  764. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  765. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +25 -17
  766. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -7
  767. data/src/core/lib/security/transport/auth_filters.h +8 -1
  768. data/src/core/lib/security/transport/client_auth_filter.cc +19 -11
  769. data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
  770. data/src/core/lib/security/transport/secure_endpoint.h +4 -3
  771. data/src/core/lib/security/transport/security_handshaker.cc +70 -49
  772. data/src/core/lib/security/transport/security_handshaker.h +6 -1
  773. data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
  774. data/src/core/lib/security/util/json_util.cc +3 -2
  775. data/src/core/lib/security/util/json_util.h +0 -2
  776. data/src/core/lib/service_config/service_config.h +11 -0
  777. data/src/core/lib/service_config/service_config_call_data.h +2 -1
  778. data/src/core/lib/service_config/service_config_impl.cc +98 -97
  779. data/src/core/lib/service_config/service_config_impl.h +12 -16
  780. data/src/core/lib/service_config/service_config_parser.cc +26 -29
  781. data/src/core/lib/service_config/service_config_parser.h +10 -22
  782. data/src/core/lib/slice/percent_encoding.cc +4 -13
  783. data/src/core/lib/slice/slice.cc +10 -4
  784. data/src/core/lib/slice/slice_buffer.cc +30 -1
  785. data/src/core/lib/slice/slice_buffer.h +37 -6
  786. data/src/core/lib/slice/slice_string_helpers.cc +0 -20
  787. data/src/core/lib/slice/slice_string_helpers.h +0 -4
  788. data/src/core/lib/surface/call.cc +61 -117
  789. data/src/core/lib/surface/call.h +5 -1
  790. data/src/core/lib/surface/channel.cc +6 -6
  791. data/src/core/lib/surface/channel.h +3 -1
  792. data/src/core/lib/surface/channel_ping.cc +1 -1
  793. data/src/core/lib/surface/completion_queue.cc +15 -16
  794. data/src/core/lib/surface/completion_queue.h +2 -4
  795. data/src/core/lib/surface/init.cc +2 -7
  796. data/src/core/lib/surface/lame_client.cc +3 -4
  797. data/src/core/lib/surface/lame_client.h +2 -2
  798. data/src/core/lib/surface/server.cc +21 -20
  799. data/src/core/lib/surface/server.h +11 -8
  800. data/src/core/lib/surface/validate_metadata.cc +5 -15
  801. data/src/core/lib/surface/version.cc +2 -2
  802. data/src/core/lib/transport/connectivity_state.cc +0 -1
  803. data/src/core/lib/transport/connectivity_state.h +1 -1
  804. data/src/core/lib/transport/error_utils.cc +9 -39
  805. data/src/core/lib/transport/handshaker.cc +10 -12
  806. data/src/core/lib/transport/handshaker.h +4 -5
  807. data/src/core/lib/transport/handshaker_factory.h +2 -3
  808. data/src/core/lib/transport/handshaker_registry.cc +2 -1
  809. data/src/core/lib/transport/handshaker_registry.h +2 -4
  810. data/src/core/lib/transport/http_connect_handshaker.cc +20 -20
  811. data/src/core/lib/transport/metadata_batch.cc +5 -0
  812. data/src/core/lib/transport/metadata_batch.h +52 -7
  813. data/src/core/lib/transport/parsed_metadata.h +0 -1
  814. data/src/core/lib/transport/tcp_connect_handshaker.cc +14 -20
  815. data/src/core/lib/transport/transport.cc +0 -3
  816. data/src/core/lib/transport/transport.h +20 -21
  817. data/src/core/lib/transport/transport_fwd.h +20 -0
  818. data/src/core/lib/transport/transport_impl.h +1 -0
  819. data/src/core/lib/transport/transport_op_string.cc +9 -9
  820. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +40 -21
  821. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  822. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +15 -8
  823. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
  824. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
  825. data/src/core/tsi/fake_transport_security.cc +66 -31
  826. data/src/core/tsi/fake_transport_security.h +6 -0
  827. data/src/core/tsi/local_transport_security.cc +9 -5
  828. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +10 -1
  829. data/src/core/tsi/ssl_transport_security.cc +48 -24
  830. data/src/core/tsi/transport_security.cc +18 -6
  831. data/src/core/tsi/transport_security.h +2 -1
  832. data/src/core/tsi/transport_security_grpc.cc +3 -2
  833. data/src/core/tsi/transport_security_grpc.h +5 -2
  834. data/src/core/tsi/transport_security_interface.h +17 -5
  835. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  836. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  837. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  838. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  839. data/src/ruby/ext/grpc/extconf.rb +51 -18
  840. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  841. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  842. data/src/ruby/lib/grpc/2.5/grpc_c.so +0 -0
  843. data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
  844. data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
  845. data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
  846. data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
  847. data/src/ruby/lib/grpc/errors.rb +1 -1
  848. data/src/ruby/lib/grpc/grpc_c.so +0 -0
  849. data/src/ruby/lib/grpc/version.rb +1 -1
  850. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  851. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  852. data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
  853. data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
  854. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  855. data/third_party/abseil-cpp/absl/base/config.h +182 -41
  856. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  857. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  858. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  859. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  860. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  861. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  862. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  863. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  864. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  865. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  866. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
  867. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  868. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  869. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  870. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
  871. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  872. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  873. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
  874. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  875. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  876. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  877. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  878. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  879. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
  880. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  881. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
  882. data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
  883. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  884. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  885. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
  886. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
  887. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
  888. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
  889. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
  890. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  891. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
  892. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  893. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  894. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  895. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  896. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  897. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
  898. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  899. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
  900. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  901. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
  902. data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
  903. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  904. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  905. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
  906. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  907. data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
  908. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  909. data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
  910. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  911. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
  912. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  913. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  914. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  915. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  916. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  917. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  918. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
  919. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  920. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  921. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  922. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  923. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  924. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  925. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  926. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  927. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  928. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  929. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  930. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  931. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  932. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
  933. data/third_party/abseil-cpp/absl/status/status.cc +174 -2
  934. data/third_party/abseil-cpp/absl/status/status.h +22 -12
  935. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  936. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  937. data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
  938. data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
  939. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  940. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  941. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  942. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  943. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  944. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  945. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
  946. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
  947. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
  948. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
  949. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  950. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  951. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  952. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  953. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  954. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  955. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  956. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  957. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
  958. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
  959. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  960. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  961. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  962. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  963. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
  964. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
  965. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  966. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
  967. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
  968. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  969. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  970. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  971. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  972. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  973. data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
  974. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  975. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  976. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  977. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  978. data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
  979. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
  980. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  981. data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
  982. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  983. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  984. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  985. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  986. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  987. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  988. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  989. data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
  990. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  991. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  992. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  993. data/third_party/abseil-cpp/absl/time/time.h +16 -12
  994. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  995. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  996. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  997. data/third_party/abseil-cpp/absl/types/span.h +2 -1
  998. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  999. data/third_party/upb/upb/arena.c +277 -0
  1000. data/third_party/upb/upb/arena.h +225 -0
  1001. data/third_party/upb/upb/array.c +114 -0
  1002. data/third_party/upb/upb/array.h +83 -0
  1003. data/third_party/upb/upb/collections.h +36 -0
  1004. data/third_party/upb/upb/decode.c +161 -65
  1005. data/third_party/upb/upb/decode.h +1 -0
  1006. data/third_party/upb/upb/decode_fast.c +1 -1
  1007. data/third_party/upb/upb/def.c +10 -2
  1008. data/third_party/upb/upb/def.h +8 -1
  1009. data/third_party/upb/upb/def.hpp +7 -4
  1010. data/third_party/upb/upb/encode.c +29 -20
  1011. data/third_party/upb/upb/encode.h +16 -6
  1012. data/third_party/upb/upb/extension_registry.c +93 -0
  1013. data/third_party/upb/upb/extension_registry.h +84 -0
  1014. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
  1015. data/third_party/upb/upb/internal/table.h +385 -0
  1016. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
  1017. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  1018. data/third_party/upb/upb/json_decode.c +1512 -0
  1019. data/third_party/upb/upb/json_decode.h +47 -0
  1020. data/third_party/upb/upb/json_encode.c +7 -3
  1021. data/third_party/upb/upb/json_encode.h +6 -3
  1022. data/third_party/upb/upb/map.c +108 -0
  1023. data/third_party/upb/upb/map.h +117 -0
  1024. data/third_party/upb/upb/message_value.h +66 -0
  1025. data/third_party/upb/upb/mini_table.c +1147 -0
  1026. data/third_party/upb/upb/mini_table.h +189 -0
  1027. data/third_party/upb/upb/mini_table.hpp +112 -0
  1028. data/third_party/upb/upb/msg.c +2 -62
  1029. data/third_party/upb/upb/msg.h +2 -45
  1030. data/third_party/upb/upb/msg_internal.h +28 -22
  1031. data/third_party/upb/upb/port_def.inc +2 -1
  1032. data/third_party/upb/upb/port_undef.inc +1 -0
  1033. data/third_party/upb/upb/reflection.c +2 -159
  1034. data/third_party/upb/upb/reflection.h +2 -112
  1035. data/third_party/upb/upb/status.c +86 -0
  1036. data/third_party/upb/upb/status.h +66 -0
  1037. data/third_party/upb/upb/table.c +2 -2
  1038. data/third_party/upb/upb/table_internal.h +3 -352
  1039. data/third_party/upb/upb/text_encode.c +3 -2
  1040. data/third_party/upb/upb/upb.c +4 -290
  1041. data/third_party/upb/upb/upb.h +7 -196
  1042. metadata +113 -37
  1043. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
  1044. data/src/core/lib/event_engine/event_engine.cc +0 -62
  1045. data/src/core/lib/event_engine/iomgr_engine.cc +0 -206
  1046. data/src/core/lib/iomgr/error_internal.h +0 -66
  1047. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  1048. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  1049. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  1050. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  1051. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  1052. data/src/core/lib/promise/detail/switch.h +0 -1455
  1053. data/src/core/lib/slice/slice_split.cc +0 -103
  1054. data/src/core/lib/slice/slice_split.h +0 -36
  1055. data/src/core/lib/transport/byte_stream.cc +0 -165
  1056. data/src/core/lib/transport/byte_stream.h +0 -170
  1057. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
  1058. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
  1059. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -97,6 +97,8 @@ typedef size_t msg_iovlen_type;
97
97
 
98
98
  extern grpc_core::TraceFlag grpc_tcp_trace;
99
99
 
100
+ GPR_GLOBAL_CONFIG_DECLARE_BOOL(grpc_experimental_enable_tcp_frame_size_tuning);
101
+
100
102
  namespace grpc_core {
101
103
 
102
104
  class TcpZerocopySendRecord {
@@ -232,7 +234,11 @@ class TcpZerocopySendCtx {
232
234
  // buffers that were sent with the corresponding call to sendmsg().
233
235
  void NoteSend(TcpZerocopySendRecord* record) {
234
236
  record->Ref();
235
- AssociateSeqWithSendRecord(last_send_, record);
237
+ {
238
+ MutexLock guard(&lock_);
239
+ is_in_write_ = true;
240
+ AssociateSeqWithSendRecordLocked(last_send_, record);
241
+ }
236
242
  ++last_send_;
237
243
  }
238
244
 
@@ -253,8 +259,8 @@ class TcpZerocopySendCtx {
253
259
 
254
260
  // Simply associate this send record (and the underlying sent data buffers)
255
261
  // with the implicit sequence number for this zerocopy sendmsg().
256
- void AssociateSeqWithSendRecord(uint32_t seq, TcpZerocopySendRecord* record) {
257
- MutexLock guard(&lock_);
262
+ void AssociateSeqWithSendRecordLocked(uint32_t seq,
263
+ TcpZerocopySendRecord* record) {
258
264
  ctx_lookup_.emplace(seq, record);
259
265
  }
260
266
 
@@ -312,7 +318,107 @@ class TcpZerocopySendCtx {
312
318
  // zerocopy is not useful for small transfers.
313
319
  size_t threshold_bytes() const { return threshold_bytes_; }
314
320
 
321
+ // Expected to be called by handler reading messages from the err queue.
322
+ // It is used to indicate that some OMem meory is now available. It returns
323
+ // true to tell the caller to mark the file descriptor as immediately
324
+ // writable.
325
+ //
326
+ // If a write is currently in progress on the socket (ie. we have issued a
327
+ // sendmsg() and are about to check its return value) then we set omem state
328
+ // to CHECK to make the sending thread know that some tcp_omem was
329
+ // concurrently freed even if sendmsg() returns ENOBUFS. In this case, since
330
+ // there is already an active send thread, we do not need to mark the
331
+ // socket writeable, so we return false.
332
+ //
333
+ // If there was no write in progress on the socket, and the socket was not
334
+ // marked as FULL, then we need not mark the socket writeable now that some
335
+ // tcp_omem memory is freed since it was not considered as blocked on
336
+ // tcp_omem to begin with. So in this case, return false.
337
+ //
338
+ // But, if a write was not in progress and the omem state was FULL, then we
339
+ // need to mark the socket writeable since it is no longer blocked by
340
+ // tcp_omem. In this case, return true.
341
+ //
342
+ // Please refer to the STATE TRANSITION DIAGRAM below for more details.
343
+ //
344
+ bool UpdateZeroCopyOMemStateAfterFree() {
345
+ MutexLock guard(&lock_);
346
+ if (is_in_write_) {
347
+ zcopy_enobuf_state_ = OMemState::CHECK;
348
+ return false;
349
+ }
350
+ GPR_DEBUG_ASSERT(zcopy_enobuf_state_ != OMemState::CHECK);
351
+ if (zcopy_enobuf_state_ == OMemState::FULL) {
352
+ // A previous sendmsg attempt was blocked by ENOBUFS. Return true to
353
+ // mark the fd as writable so the next write attempt could be made.
354
+ zcopy_enobuf_state_ = OMemState::OPEN;
355
+ return true;
356
+ } else if (zcopy_enobuf_state_ == OMemState::OPEN) {
357
+ // No need to mark the fd as writable because the previous write
358
+ // attempt did not encounter ENOBUFS.
359
+ return false;
360
+ } else {
361
+ // This state should never be reached because it implies that the previous
362
+ // state was CHECK and is_in_write is false. This means that after the
363
+ // previous sendmsg returned and set is_in_write to false, it did
364
+ // not update the z-copy change from CHECK to OPEN.
365
+ GPR_ASSERT(false && "OMem state error!");
366
+ }
367
+ }
368
+
369
+ // Expected to be called by the thread calling sendmsg after the syscall
370
+ // invocation. is complete. If an ENOBUF is seen, it checks if the error
371
+ // handler (Tx0cp completions) has already run and free'ed up some OMem. It
372
+ // returns true indicating that the write can be attempted again immediately.
373
+ // If ENOBUFS was seen but no Tx0cp completions have been received between the
374
+ // sendmsg() and us taking this lock, then tcp_omem is still full from our
375
+ // point of view. Therefore, we do not signal that the socket is writeable
376
+ // with respect to the availability of tcp_omem. Therefore the function
377
+ // returns false. This indicates that another write should not be attempted
378
+ // immediately and the calling thread should wait until the socket is writable
379
+ // again. If ENOBUFS was not seen, then again return false because the next
380
+ // write should be attempted only when the socket is writable again.
381
+ //
382
+ // Please refer to the STATE TRANSITION DIAGRAM below for more details.
383
+ //
384
+ bool UpdateZeroCopyOMemStateAfterSend(bool seen_enobuf) {
385
+ MutexLock guard(&lock_);
386
+ is_in_write_ = false;
387
+ if (seen_enobuf) {
388
+ if (zcopy_enobuf_state_ == OMemState::CHECK) {
389
+ zcopy_enobuf_state_ = OMemState::OPEN;
390
+ return true;
391
+ } else {
392
+ zcopy_enobuf_state_ = OMemState::FULL;
393
+ }
394
+ } else if (zcopy_enobuf_state_ != OMemState::OPEN) {
395
+ zcopy_enobuf_state_ = OMemState::OPEN;
396
+ }
397
+ return false;
398
+ }
399
+
315
400
  private:
401
+ // STATE TRANSITION DIAGRAM
402
+ //
403
+ // sendmsg succeeds Tx-zero copy succeeds and there is no active sendmsg
404
+ // ----<<--+ +------<<-------------------------------------+
405
+ // | | | |
406
+ // | | v sendmsg returns ENOBUFS |
407
+ // +-----> OPEN ------------->>-------------------------> FULL
408
+ // ^ |
409
+ // | |
410
+ // | sendmsg completes |
411
+ // +----<<---------- CHECK <-------<<-------------+
412
+ // Tx-zero copy succeeds and there is
413
+ // an active sendmsg
414
+ //
415
+ enum class OMemState : int8_t {
416
+ OPEN, // Everything is clear and omem is not full.
417
+ FULL, // The last sendmsg() has returned with an errno of ENOBUFS.
418
+ CHECK, // Error queue is read while is_in_write_ was true, so we should
419
+ // check this state after the sendmsg.
420
+ };
421
+
316
422
  TcpZerocopySendRecord* ReleaseSendRecordLocked(uint32_t seq) {
317
423
  auto iter = ctx_lookup_.find(seq);
318
424
  GPR_DEBUG_ASSERT(iter != ctx_lookup_.end());
@@ -349,6 +455,8 @@ class TcpZerocopySendCtx {
349
455
  size_t threshold_bytes_ = kDefaultSendBytesThreshold;
350
456
  std::unordered_map<uint32_t, TcpZerocopySendRecord*> ctx_lookup_;
351
457
  bool memory_limited_ = false;
458
+ bool is_in_write_ = false;
459
+ OMemState zcopy_enobuf_state_;
352
460
  };
353
461
 
354
462
  } // namespace grpc_core
@@ -357,6 +465,13 @@ using grpc_core::TcpZerocopySendCtx;
357
465
  using grpc_core::TcpZerocopySendRecord;
358
466
 
359
467
  namespace {
468
+
469
+ bool ExperimentalTcpFrameSizeTuningEnabled() {
470
+ static const bool kEnableTcpFrameSizeTuning =
471
+ GPR_GLOBAL_CONFIG_GET(grpc_experimental_enable_tcp_frame_size_tuning);
472
+ return kEnableTcpFrameSizeTuning;
473
+ }
474
+
360
475
  struct grpc_tcp {
361
476
  grpc_tcp(int max_sends, size_t send_bytes_threshold)
362
477
  : tcp_zerocopy_send_ctx(max_sends, send_bytes_threshold) {}
@@ -426,6 +541,11 @@ struct grpc_tcp {
426
541
  on errors anymore */
427
542
  TcpZerocopySendCtx tcp_zerocopy_send_ctx;
428
543
  TcpZerocopySendRecord* current_zerocopy_send = nullptr;
544
+
545
+ bool frame_size_tuning_enabled;
546
+ int min_progress_size; /* A hint from upper layers specifying the minimum
547
+ number of bytes that need to be read to make
548
+ meaningful progress */
429
549
  };
430
550
 
431
551
  struct backup_poller {
@@ -736,6 +856,7 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
736
856
  }
737
857
 
738
858
  GPR_ASSERT(tcp->incoming_buffer->length != 0);
859
+ GPR_DEBUG_ASSERT(tcp->min_progress_size > 0);
739
860
 
740
861
  do {
741
862
  /* Assume there is something on the queue. If we receive TCP_INQ from
@@ -767,7 +888,8 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
767
888
 
768
889
  /* We have read something in previous reads. We need to deliver those
769
890
  * bytes to the upper layer. */
770
- if (read_bytes <= 0 && total_read_bytes > 0) {
891
+ if (read_bytes <= 0 &&
892
+ total_read_bytes >= static_cast<size_t>(tcp->min_progress_size)) {
771
893
  tcp->inq = 1;
772
894
  break;
773
895
  }
@@ -776,6 +898,9 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
776
898
  /* NB: After calling call_read_cb a parallel call of the read handler may
777
899
  * be running. */
778
900
  if (errno == EAGAIN) {
901
+ if (total_read_bytes > 0) {
902
+ break;
903
+ }
779
904
  finish_estimate(tcp);
780
905
  tcp->inq = 0;
781
906
  return false;
@@ -848,18 +973,45 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
848
973
  }
849
974
 
850
975
  GPR_DEBUG_ASSERT(total_read_bytes > 0);
976
+ *error = GRPC_ERROR_NONE;
977
+ if (tcp->frame_size_tuning_enabled) {
978
+ // Update min progress size based on the total number of bytes read in
979
+ // this round.
980
+ tcp->min_progress_size -= total_read_bytes;
981
+ if (tcp->min_progress_size > 0) {
982
+ // There is still some bytes left to be read before we can signal
983
+ // the read as complete. Append the bytes read so far into
984
+ // last_read_buffer which serves as a staging buffer. Return false
985
+ // to indicate tcp_handle_read needs to be scheduled again.
986
+ grpc_slice_buffer_move_first(tcp->incoming_buffer, total_read_bytes,
987
+ &tcp->last_read_buffer);
988
+ return false;
989
+ } else {
990
+ // The required number of bytes have been read. Append the bytes
991
+ // read in this round into last_read_buffer. Then swap last_read_buffer
992
+ // and incoming_buffer. Now incoming buffer contains all the bytes
993
+ // read since the start of the last tcp_read operation. last_read_buffer
994
+ // would contain any spare space left in the incoming buffer. This
995
+ // space will be used in the next tcp_read operation.
996
+ tcp->min_progress_size = 1;
997
+ grpc_slice_buffer_move_first(tcp->incoming_buffer, total_read_bytes,
998
+ &tcp->last_read_buffer);
999
+ grpc_slice_buffer_swap(&tcp->last_read_buffer, tcp->incoming_buffer);
1000
+ return true;
1001
+ }
1002
+ }
851
1003
  if (total_read_bytes < tcp->incoming_buffer->length) {
852
1004
  grpc_slice_buffer_trim_end(tcp->incoming_buffer,
853
1005
  tcp->incoming_buffer->length - total_read_bytes,
854
1006
  &tcp->last_read_buffer);
855
1007
  }
856
- *error = GRPC_ERROR_NONE;
857
1008
  return true;
858
1009
  }
859
1010
 
860
1011
  static void maybe_make_read_slices(grpc_tcp* tcp)
861
1012
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(tcp->read_mu) {
862
- if (tcp->incoming_buffer->length == 0 &&
1013
+ if (tcp->incoming_buffer->length <
1014
+ static_cast<size_t>(tcp->min_progress_size) &&
863
1015
  tcp->incoming_buffer->count < MAX_READ_IOVEC) {
864
1016
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
865
1017
  gpr_log(GPR_INFO,
@@ -868,15 +1020,20 @@ static void maybe_make_read_slices(grpc_tcp* tcp)
868
1020
  tcp, tcp->min_read_chunk_size, tcp->max_read_chunk_size,
869
1021
  tcp->target_length, tcp->incoming_buffer->length);
870
1022
  }
871
- int target_length = static_cast<int>(tcp->target_length);
1023
+ int target_length =
1024
+ std::max(static_cast<int>(tcp->target_length), tcp->min_progress_size);
872
1025
  int extra_wanted =
873
1026
  target_length - static_cast<int>(tcp->incoming_buffer->length);
1027
+ int min_read_chunk_size =
1028
+ std::max(tcp->min_read_chunk_size, tcp->min_progress_size);
1029
+ int max_read_chunk_size =
1030
+ std::max(tcp->max_read_chunk_size, tcp->min_progress_size);
874
1031
  grpc_slice_buffer_add_indexed(
875
1032
  tcp->incoming_buffer,
876
1033
  tcp->memory_owner.MakeSlice(grpc_core::MemoryRequest(
877
- tcp->min_read_chunk_size,
878
- grpc_core::Clamp(extra_wanted, tcp->min_read_chunk_size,
879
- tcp->max_read_chunk_size))));
1034
+ min_read_chunk_size,
1035
+ grpc_core::Clamp(extra_wanted, min_read_chunk_size,
1036
+ max_read_chunk_size))));
880
1037
  maybe_post_reclaimer(tcp);
881
1038
  }
882
1039
  }
@@ -889,7 +1046,7 @@ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error) {
889
1046
  }
890
1047
  tcp->read_mu.Lock();
891
1048
  grpc_error_handle tcp_read_error;
892
- if (GPR_LIKELY(error == GRPC_ERROR_NONE)) {
1049
+ if (GPR_LIKELY(GRPC_ERROR_IS_NONE(error))) {
893
1050
  maybe_make_read_slices(tcp);
894
1051
  if (!tcp_do_read(tcp, &tcp_read_error)) {
895
1052
  /* We've consumed the edge, request a new one */
@@ -912,12 +1069,14 @@ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error) {
912
1069
  }
913
1070
 
914
1071
  static void tcp_read(grpc_endpoint* ep, grpc_slice_buffer* incoming_buffer,
915
- grpc_closure* cb, bool urgent, int /*min_progress_size*/) {
1072
+ grpc_closure* cb, bool urgent, int min_progress_size) {
916
1073
  grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
917
1074
  GPR_ASSERT(tcp->read_cb == nullptr);
918
1075
  tcp->read_cb = cb;
919
1076
  tcp->read_mu.Lock();
920
1077
  tcp->incoming_buffer = incoming_buffer;
1078
+ tcp->min_progress_size =
1079
+ tcp->frame_size_tuning_enabled ? min_progress_size : 1;
921
1080
  grpc_slice_buffer_reset_and_unref_internal(incoming_buffer);
922
1081
  grpc_slice_buffer_swap(incoming_buffer, &tcp->last_read_buffer);
923
1082
  tcp->read_mu.Unlock();
@@ -945,14 +1104,15 @@ static void tcp_read(grpc_endpoint* ep, grpc_slice_buffer* incoming_buffer,
945
1104
 
946
1105
  /* A wrapper around sendmsg. It sends \a msg over \a fd and returns the number
947
1106
  * of bytes sent. */
948
- ssize_t tcp_send(int fd, const struct msghdr* msg, int additional_flags = 0) {
1107
+ ssize_t tcp_send(int fd, const struct msghdr* msg, int* saved_errno,
1108
+ int additional_flags = 0) {
949
1109
  GPR_TIMER_SCOPE("sendmsg", 1);
950
1110
  ssize_t sent_length;
951
1111
  do {
952
1112
  /* TODO(klempner): Cork if this is a partial write */
953
1113
  GRPC_STATS_INC_SYSCALL_WRITE();
954
1114
  sent_length = sendmsg(fd, msg, SENDMSG_FLAGS | additional_flags);
955
- } while (sent_length < 0 && errno == EINTR);
1115
+ } while (sent_length < 0 && (*saved_errno = errno) == EINTR);
956
1116
  return sent_length;
957
1117
  }
958
1118
 
@@ -964,7 +1124,7 @@ ssize_t tcp_send(int fd, const struct msghdr* msg, int additional_flags = 0) {
964
1124
  */
965
1125
  static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
966
1126
  size_t sending_length,
967
- ssize_t* sent_length,
1127
+ ssize_t* sent_length, int* saved_errno,
968
1128
  int additional_flags = 0);
969
1129
 
970
1130
  /** The callback function to be invoked when we get an error on the socket. */
@@ -1008,7 +1168,7 @@ static void ZerocopyDisableAndWaitForRemaining(grpc_tcp* tcp) {
1008
1168
 
1009
1169
  static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
1010
1170
  size_t sending_length,
1011
- ssize_t* sent_length,
1171
+ ssize_t* sent_length, int* saved_errno,
1012
1172
  int additional_flags) {
1013
1173
  if (!tcp->socket_ts_enabled) {
1014
1174
  uint32_t opt = grpc_core::kTimestampingSocketOptions;
@@ -1037,7 +1197,7 @@ static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
1037
1197
  msg->msg_controllen = CMSG_SPACE(sizeof(uint32_t));
1038
1198
 
1039
1199
  /* If there was an error on sendmsg the logic in tcp_flush will handle it. */
1040
- ssize_t length = tcp_send(tcp->fd, msg, additional_flags);
1200
+ ssize_t length = tcp_send(tcp->fd, msg, saved_errno, additional_flags);
1041
1201
  *sent_length = length;
1042
1202
  /* Only save timestamps if all the bytes were taken by sendmsg. */
1043
1203
  if (sending_length == static_cast<size_t>(length)) {
@@ -1072,6 +1232,9 @@ static void process_zerocopy(grpc_tcp* tcp, struct cmsghdr* cmsg) {
1072
1232
  GPR_DEBUG_ASSERT(record);
1073
1233
  UnrefMaybePutZerocopySendRecord(tcp, record, seq, "CALLBACK RCVD");
1074
1234
  }
1235
+ if (tcp->tcp_zerocopy_send_ctx.UpdateZeroCopyOMemStateAfterFree()) {
1236
+ grpc_fd_set_writable(tcp->em_fd);
1237
+ }
1075
1238
  }
1076
1239
 
1077
1240
  // Whether the cmsg received from error queue is of the IPv4 or IPv6 levels.
@@ -1231,7 +1394,7 @@ static void tcp_handle_error(void* arg /* grpc_tcp */,
1231
1394
  grpc_error_std_string(error).c_str());
1232
1395
  }
1233
1396
 
1234
- if (error != GRPC_ERROR_NONE ||
1397
+ if (!GRPC_ERROR_IS_NONE(error) ||
1235
1398
  static_cast<bool>(gpr_atm_acq_load(&tcp->stop_error_notification))) {
1236
1399
  /* We aren't going to register to hear on error anymore, so it is safe to
1237
1400
  * unref. */
@@ -1262,6 +1425,7 @@ static void ZerocopyDisableAndWaitForRemaining(grpc_tcp* /*tcp*/) {}
1262
1425
  static bool tcp_write_with_timestamps(grpc_tcp* /*tcp*/, struct msghdr* /*msg*/,
1263
1426
  size_t /*sending_length*/,
1264
1427
  ssize_t* /*sent_length*/,
1428
+ int* /* saved_errno */,
1265
1429
  int /*additional_flags*/) {
1266
1430
  gpr_log(GPR_ERROR, "Write with timestamps not supported for this platform");
1267
1431
  GPR_ASSERT(0);
@@ -1342,6 +1506,7 @@ static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
1342
1506
  size_t unwind_slice_idx;
1343
1507
  size_t unwind_byte_idx;
1344
1508
  bool tried_sending_message;
1509
+ int saved_errno;
1345
1510
  msghdr msg;
1346
1511
  // iov consumes a large space. Keep it as the last item on the stack to
1347
1512
  // improve locality. After all, we expect only the first elements of it being
@@ -1360,10 +1525,11 @@ static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
1360
1525
  // Before calling sendmsg (with or without timestamps): we
1361
1526
  // take a single ref on the zerocopy send record.
1362
1527
  tcp->tcp_zerocopy_send_ctx.NoteSend(record);
1528
+ saved_errno = 0;
1363
1529
  if (tcp->outgoing_buffer_arg != nullptr) {
1364
1530
  if (!tcp->ts_capable ||
1365
1531
  !tcp_write_with_timestamps(tcp, &msg, sending_length, &sent_length,
1366
- MSG_ZEROCOPY)) {
1532
+ &saved_errno, MSG_ZEROCOPY)) {
1367
1533
  /* We could not set socket options to collect Fathom timestamps.
1368
1534
  * Fallback on writing without timestamps. */
1369
1535
  tcp->ts_capable = false;
@@ -1377,20 +1543,24 @@ static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
1377
1543
  msg.msg_controllen = 0;
1378
1544
  GRPC_STATS_INC_TCP_WRITE_SIZE(sending_length);
1379
1545
  GRPC_STATS_INC_TCP_WRITE_IOV_SIZE(iov_size);
1380
- sent_length = tcp_send(tcp->fd, &msg, MSG_ZEROCOPY);
1546
+ sent_length = tcp_send(tcp->fd, &msg, &saved_errno, MSG_ZEROCOPY);
1547
+ }
1548
+ if (tcp->tcp_zerocopy_send_ctx.UpdateZeroCopyOMemStateAfterSend(
1549
+ saved_errno == ENOBUFS)) {
1550
+ grpc_fd_set_writable(tcp->em_fd);
1381
1551
  }
1382
1552
  if (sent_length < 0) {
1383
1553
  // If this particular send failed, drop ref taken earlier in this method.
1384
1554
  tcp->tcp_zerocopy_send_ctx.UndoSend();
1385
- if (errno == EAGAIN) {
1555
+ if (saved_errno == EAGAIN || saved_errno == ENOBUFS) {
1386
1556
  record->UnwindIfThrottled(unwind_slice_idx, unwind_byte_idx);
1387
1557
  return false;
1388
- } else if (errno == EPIPE) {
1389
- *error = tcp_annotate_error(GRPC_OS_ERROR(errno, "sendmsg"), tcp);
1558
+ } else if (saved_errno == EPIPE) {
1559
+ *error = tcp_annotate_error(GRPC_OS_ERROR(saved_errno, "sendmsg"), tcp);
1390
1560
  tcp_shutdown_buffer_list(tcp);
1391
1561
  return true;
1392
1562
  } else {
1393
- *error = tcp_annotate_error(GRPC_OS_ERROR(errno, "sendmsg"), tcp);
1563
+ *error = tcp_annotate_error(GRPC_OS_ERROR(saved_errno, "sendmsg"), tcp);
1394
1564
  tcp_shutdown_buffer_list(tcp);
1395
1565
  return true;
1396
1566
  }
@@ -1434,6 +1604,7 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
1434
1604
  size_t trailing;
1435
1605
  size_t unwind_slice_idx;
1436
1606
  size_t unwind_byte_idx;
1607
+ int saved_errno;
1437
1608
 
1438
1609
  // We always start at zero, because we eagerly unref and trim the slice
1439
1610
  // buffer as we write
@@ -1465,9 +1636,11 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
1465
1636
  msg.msg_iovlen = iov_size;
1466
1637
  msg.msg_flags = 0;
1467
1638
  bool tried_sending_message = false;
1639
+ saved_errno = 0;
1468
1640
  if (tcp->outgoing_buffer_arg != nullptr) {
1469
1641
  if (!tcp->ts_capable ||
1470
- !tcp_write_with_timestamps(tcp, &msg, sending_length, &sent_length)) {
1642
+ !tcp_write_with_timestamps(tcp, &msg, sending_length, &sent_length,
1643
+ &saved_errno)) {
1471
1644
  /* We could not set socket options to collect Fathom timestamps.
1472
1645
  * Fallback on writing without timestamps. */
1473
1646
  tcp->ts_capable = false;
@@ -1483,11 +1656,11 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
1483
1656
  GRPC_STATS_INC_TCP_WRITE_SIZE(sending_length);
1484
1657
  GRPC_STATS_INC_TCP_WRITE_IOV_SIZE(iov_size);
1485
1658
 
1486
- sent_length = tcp_send(tcp->fd, &msg);
1659
+ sent_length = tcp_send(tcp->fd, &msg, &saved_errno);
1487
1660
  }
1488
1661
 
1489
1662
  if (sent_length < 0) {
1490
- if (errno == EAGAIN) {
1663
+ if (saved_errno == EAGAIN || saved_errno == ENOBUFS) {
1491
1664
  tcp->outgoing_byte_idx = unwind_byte_idx;
1492
1665
  // unref all and forget about all slices that have been written to this
1493
1666
  // point
@@ -1495,13 +1668,13 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
1495
1668
  grpc_slice_buffer_remove_first(tcp->outgoing_buffer);
1496
1669
  }
1497
1670
  return false;
1498
- } else if (errno == EPIPE) {
1499
- *error = tcp_annotate_error(GRPC_OS_ERROR(errno, "sendmsg"), tcp);
1671
+ } else if (saved_errno == EPIPE) {
1672
+ *error = tcp_annotate_error(GRPC_OS_ERROR(saved_errno, "sendmsg"), tcp);
1500
1673
  grpc_slice_buffer_reset_and_unref_internal(tcp->outgoing_buffer);
1501
1674
  tcp_shutdown_buffer_list(tcp);
1502
1675
  return true;
1503
1676
  } else {
1504
- *error = tcp_annotate_error(GRPC_OS_ERROR(errno, "sendmsg"), tcp);
1677
+ *error = tcp_annotate_error(GRPC_OS_ERROR(saved_errno, "sendmsg"), tcp);
1505
1678
  grpc_slice_buffer_reset_and_unref_internal(tcp->outgoing_buffer);
1506
1679
  tcp_shutdown_buffer_list(tcp);
1507
1680
  return true;
@@ -1537,7 +1710,7 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
1537
1710
  grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
1538
1711
  grpc_closure* cb;
1539
1712
 
1540
- if (error != GRPC_ERROR_NONE) {
1713
+ if (!GRPC_ERROR_IS_NONE(error)) {
1541
1714
  cb = tcp->write_cb;
1542
1715
  tcp->write_cb = nullptr;
1543
1716
  if (tcp->current_zerocopy_send != nullptr) {
@@ -1549,7 +1722,6 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
1549
1722
  TCP_UNREF(tcp, "write");
1550
1723
  return;
1551
1724
  }
1552
-
1553
1725
  bool flush_result =
1554
1726
  tcp->current_zerocopy_send != nullptr
1555
1727
  ? tcp_flush_zerocopy(tcp, tcp->current_zerocopy_send, &error)
@@ -1560,7 +1732,7 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
1560
1732
  }
1561
1733
  notify_on_write(tcp);
1562
1734
  // tcp_flush does not populate error if it has returned false.
1563
- GPR_DEBUG_ASSERT(error == GRPC_ERROR_NONE);
1735
+ GPR_DEBUG_ASSERT(GRPC_ERROR_IS_NONE(error));
1564
1736
  } else {
1565
1737
  cb = tcp->write_cb;
1566
1738
  tcp->write_cb = nullptr;
@@ -1792,6 +1964,8 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
1792
1964
  tcp->socket_ts_enabled = false;
1793
1965
  tcp->ts_capable = true;
1794
1966
  tcp->outgoing_buffer_arg = nullptr;
1967
+ tcp->frame_size_tuning_enabled = ExperimentalTcpFrameSizeTuningEnabled();
1968
+ tcp->min_progress_size = 1;
1795
1969
  if (tcp_tx_zerocopy_enabled && !tcp->tcp_zerocopy_send_ctx.memory_limited()) {
1796
1970
  #ifdef GRPC_LINUX_ERRQUEUE
1797
1971
  const int enable = 1;
@@ -191,7 +191,7 @@ static void tcp_server_destroy(grpc_tcp_server* s) {
191
191
  static void on_read(void* arg, grpc_error_handle err) {
192
192
  grpc_tcp_listener* sp = static_cast<grpc_tcp_listener*>(arg);
193
193
  grpc_pollset* read_notifier_pollset;
194
- if (err != GRPC_ERROR_NONE) {
194
+ if (!GRPC_ERROR_IS_NONE(err)) {
195
195
  goto error;
196
196
  }
197
197
 
@@ -253,7 +253,7 @@ static void on_read(void* arg, grpc_error_handle err) {
253
253
 
254
254
  err = grpc_apply_socket_mutator_in_args(fd, GRPC_FD_SERVER_CONNECTION_USAGE,
255
255
  sp->server->channel_args);
256
- if (err != GRPC_ERROR_NONE) {
256
+ if (!GRPC_ERROR_IS_NONE(err)) {
257
257
  goto error;
258
258
  }
259
259
 
@@ -344,14 +344,14 @@ static grpc_error_handle add_wildcard_addrs_to_server(grpc_tcp_server* s,
344
344
  }
345
345
  }
346
346
  if (*out_port > 0) {
347
- if (v6_err != GRPC_ERROR_NONE) {
347
+ if (!GRPC_ERROR_IS_NONE(v6_err)) {
348
348
  gpr_log(GPR_INFO,
349
349
  "Failed to add :: listener, "
350
350
  "the environment may not support IPv6: %s",
351
351
  grpc_error_std_string(v6_err).c_str());
352
352
  GRPC_ERROR_UNREF(v6_err);
353
353
  }
354
- if (v4_err != GRPC_ERROR_NONE) {
354
+ if (!GRPC_ERROR_IS_NONE(v4_err)) {
355
355
  gpr_log(GPR_INFO,
356
356
  "Failed to add 0.0.0.0 listener, "
357
357
  "the environment may not support IPv4: %s",
@@ -362,7 +362,7 @@ static grpc_error_handle add_wildcard_addrs_to_server(grpc_tcp_server* s,
362
362
  } else {
363
363
  grpc_error_handle root_err = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
364
364
  "Failed to add any wildcard listeners");
365
- GPR_ASSERT(v6_err != GRPC_ERROR_NONE && v4_err != GRPC_ERROR_NONE);
365
+ GPR_ASSERT(!GRPC_ERROR_IS_NONE(v6_err) && !GRPC_ERROR_IS_NONE(v4_err));
366
366
  root_err = grpc_error_add_child(root_err, v6_err);
367
367
  root_err = grpc_error_add_child(root_err, v4_err);
368
368
  return root_err;
@@ -385,10 +385,10 @@ static grpc_error_handle clone_port(grpc_tcp_listener* listener,
385
385
  grpc_dualstack_mode dsmode;
386
386
  err = grpc_create_dualstack_socket(&listener->addr, SOCK_STREAM, 0, &dsmode,
387
387
  &fd);
388
- if (err != GRPC_ERROR_NONE) return err;
388
+ if (!GRPC_ERROR_IS_NONE(err)) return err;
389
389
  err = grpc_tcp_server_prepare_socket(listener->server, fd, &listener->addr,
390
390
  true, &port);
391
- if (err != GRPC_ERROR_NONE) return err;
391
+ if (!GRPC_ERROR_IS_NONE(err)) return err;
392
392
  listener->server->nports++;
393
393
  addr_str = grpc_sockaddr_to_string(&listener->addr, true);
394
394
  if (!addr_str.ok()) {
@@ -90,7 +90,7 @@ static grpc_error_handle add_socket_to_server(grpc_tcp_server* s, int fd,
90
90
 
91
91
  grpc_error_handle err =
92
92
  grpc_tcp_server_prepare_socket(s, fd, addr, s->so_reuseport, &port);
93
- if (err != GRPC_ERROR_NONE) return err;
93
+ if (!GRPC_ERROR_IS_NONE(err)) return err;
94
94
  GPR_ASSERT(port > 0);
95
95
  absl::StatusOr<std::string> addr_str = grpc_sockaddr_to_string(addr, true);
96
96
  if (!addr_str.ok()) {
@@ -137,7 +137,7 @@ grpc_error_handle grpc_tcp_server_add_addr(grpc_tcp_server* s,
137
137
  int fd;
138
138
  grpc_error_handle err =
139
139
  grpc_create_dualstack_socket(addr, SOCK_STREAM, 0, dsmode, &fd);
140
- if (err != GRPC_ERROR_NONE) {
140
+ if (!GRPC_ERROR_IS_NONE(err)) {
141
141
  return err;
142
142
  }
143
143
  if (*dsmode == GRPC_DSMODE_IPV4 &&
@@ -158,36 +158,36 @@ grpc_error_handle grpc_tcp_server_prepare_socket(
158
158
 
159
159
  if (so_reuseport && !grpc_is_unix_socket(addr)) {
160
160
  err = grpc_set_socket_reuse_port(fd, 1);
161
- if (err != GRPC_ERROR_NONE) goto error;
161
+ if (!GRPC_ERROR_IS_NONE(err)) goto error;
162
162
  }
163
163
 
164
164
  #ifdef GRPC_LINUX_ERRQUEUE
165
165
  err = grpc_set_socket_zerocopy(fd);
166
- if (err != GRPC_ERROR_NONE) {
166
+ if (!GRPC_ERROR_IS_NONE(err)) {
167
167
  /* it's not fatal, so just log it. */
168
168
  gpr_log(GPR_DEBUG, "Node does not support SO_ZEROCOPY, continuing.");
169
169
  GRPC_ERROR_UNREF(err);
170
170
  }
171
171
  #endif
172
172
  err = grpc_set_socket_nonblocking(fd, 1);
173
- if (err != GRPC_ERROR_NONE) goto error;
173
+ if (!GRPC_ERROR_IS_NONE(err)) goto error;
174
174
  err = grpc_set_socket_cloexec(fd, 1);
175
- if (err != GRPC_ERROR_NONE) goto error;
175
+ if (!GRPC_ERROR_IS_NONE(err)) goto error;
176
176
  if (!grpc_is_unix_socket(addr)) {
177
177
  err = grpc_set_socket_low_latency(fd, 1);
178
- if (err != GRPC_ERROR_NONE) goto error;
178
+ if (!GRPC_ERROR_IS_NONE(err)) goto error;
179
179
  err = grpc_set_socket_reuse_addr(fd, 1);
180
- if (err != GRPC_ERROR_NONE) goto error;
180
+ if (!GRPC_ERROR_IS_NONE(err)) goto error;
181
181
  err = grpc_set_socket_tcp_user_timeout(fd, s->channel_args,
182
182
  false /* is_client */);
183
- if (err != GRPC_ERROR_NONE) goto error;
183
+ if (!GRPC_ERROR_IS_NONE(err)) goto error;
184
184
  }
185
185
  err = grpc_set_socket_no_sigpipe_if_possible(fd);
186
- if (err != GRPC_ERROR_NONE) goto error;
186
+ if (!GRPC_ERROR_IS_NONE(err)) goto error;
187
187
 
188
188
  err = grpc_apply_socket_mutator_in_args(fd, GRPC_FD_SERVER_LISTENER_USAGE,
189
189
  s->channel_args);
190
- if (err != GRPC_ERROR_NONE) goto error;
190
+ if (!GRPC_ERROR_IS_NONE(err)) goto error;
191
191
 
192
192
  if (bind(fd, reinterpret_cast<grpc_sockaddr*>(const_cast<char*>(addr->addr)),
193
193
  addr->len) < 0) {
@@ -212,7 +212,7 @@ grpc_error_handle grpc_tcp_server_prepare_socket(
212
212
  return GRPC_ERROR_NONE;
213
213
 
214
214
  error:
215
- GPR_ASSERT(err != GRPC_ERROR_NONE);
215
+ GPR_ASSERT(!GRPC_ERROR_IS_NONE(err));
216
216
  if (fd >= 0) {
217
217
  close(fd);
218
218
  }
@@ -65,7 +65,7 @@ static grpc_error_handle get_unused_port(int* port) {
65
65
  int fd;
66
66
  grpc_error_handle err =
67
67
  grpc_create_dualstack_socket(&wild, SOCK_STREAM, 0, &dsmode, &fd);
68
- if (err != GRPC_ERROR_NONE) {
68
+ if (!GRPC_ERROR_IS_NONE(err)) {
69
69
  return err;
70
70
  }
71
71
  if (dsmode == GRPC_DSMODE_IPV4) {
@@ -164,7 +164,7 @@ grpc_error_handle grpc_tcp_server_add_all_local_addrs(grpc_tcp_server* s,
164
164
  }
165
165
  }
166
166
  freeifaddrs(ifa);
167
- if (err != GRPC_ERROR_NONE) {
167
+ if (!GRPC_ERROR_IS_NONE(err)) {
168
168
  return err;
169
169
  } else if (sp == nullptr) {
170
170
  return GRPC_ERROR_CREATE_FROM_STATIC_STRING("No local addresses");