grpc 1.45.0 → 1.46.3

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 (515) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +36 -29
  3. data/include/grpc/impl/codegen/grpc_types.h +7 -13
  4. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +309 -0
  5. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +122 -0
  6. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.cc +1 -1
  7. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.h +3 -3
  8. data/src/core/ext/filters/client_channel/client_channel.cc +163 -96
  9. data/src/core/ext/filters/client_channel/client_channel.h +2 -0
  10. data/src/core/ext/filters/client_channel/health/health_check_client.cc +124 -581
  11. data/src/core/ext/filters/client_channel/health/health_check_client.h +24 -160
  12. data/src/core/ext/filters/client_channel/http_proxy.cc +88 -110
  13. data/src/core/ext/filters/client_channel/http_proxy.h +17 -0
  14. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +182 -142
  15. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -6
  16. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +1 -10
  17. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +87 -58
  18. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +51 -48
  19. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -7
  20. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +229 -284
  21. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +92 -257
  22. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +51 -221
  23. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +201 -0
  24. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +106 -0
  25. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +102 -55
  26. data/src/core/ext/filters/client_channel/retry_filter.cc +18 -3
  27. data/src/core/ext/filters/client_channel/subchannel.cc +5 -5
  28. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +544 -0
  29. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +214 -0
  30. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +127 -367
  31. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +24 -1
  32. data/src/core/ext/filters/http/client/http_client_filter.cc +78 -458
  33. data/src/core/ext/filters/http/client/http_client_filter.h +21 -4
  34. data/src/core/ext/filters/http/client_authority_filter.cc +17 -22
  35. data/src/core/ext/filters/http/client_authority_filter.h +6 -5
  36. data/src/core/ext/filters/http/http_filters_plugin.cc +9 -6
  37. data/src/core/ext/filters/http/server/http_server_filter.cc +2 -116
  38. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +2 -8
  39. data/src/core/ext/filters/server_config_selector/server_config_selector.h +2 -2
  40. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +73 -201
  41. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -1
  42. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +5 -4
  43. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +139 -28
  44. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -0
  45. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +2 -6
  46. data/src/core/ext/transport/chttp2/transport/internal.h +4 -2
  47. data/src/core/ext/transport/chttp2/transport/parsing.cc +8 -0
  48. data/src/core/ext/transport/chttp2/transport/writing.cc +24 -13
  49. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +27 -24
  50. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +143 -63
  51. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +37 -35
  52. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +177 -77
  53. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +115 -111
  54. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +547 -207
  55. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +5 -5
  56. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +26 -13
  57. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +5 -5
  58. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +23 -9
  59. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +7 -7
  60. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +18 -0
  61. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +4 -4
  62. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +13 -4
  63. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +4 -4
  64. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +9 -0
  65. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +49 -46
  66. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +217 -78
  67. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +3 -3
  68. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +10 -2
  69. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +12 -12
  70. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +40 -8
  71. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +5 -5
  72. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +20 -2
  73. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +55 -55
  74. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +289 -110
  75. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +133 -125
  76. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +656 -267
  77. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +24 -18
  78. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +96 -23
  79. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +185 -173
  80. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +860 -309
  81. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
  82. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +10 -2
  83. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +44 -24
  84. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +165 -40
  85. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +72 -63
  86. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +433 -174
  87. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +33 -31
  88. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +154 -52
  89. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +5 -4
  90. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +14 -4
  91. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +89 -89
  92. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +460 -166
  93. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +76 -33
  94. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +379 -69
  95. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +2 -2
  96. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +14 -6
  97. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +5 -25
  98. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +10 -91
  99. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +5 -5
  100. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +26 -13
  101. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +70 -68
  102. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +369 -131
  103. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +94 -65
  104. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +447 -161
  105. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
  106. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +27 -11
  107. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +104 -85
  108. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +378 -113
  109. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +2 -2
  110. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +3 -0
  111. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +6 -6
  112. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +30 -13
  113. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +7 -7
  114. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +43 -16
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +8 -8
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +58 -24
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +4 -4
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +14 -4
  119. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +18 -18
  120. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +100 -43
  121. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +31 -30
  122. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +171 -71
  123. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +32 -32
  124. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +196 -95
  125. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
  126. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +7 -2
  127. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +53 -46
  128. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +284 -129
  129. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +56 -50
  130. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +337 -146
  131. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +13 -11
  132. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +49 -14
  133. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +4 -4
  134. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +14 -4
  135. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +5 -5
  136. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +20 -4
  137. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +33 -32
  138. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +205 -86
  139. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +34 -34
  140. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +175 -74
  141. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +56 -52
  142. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +370 -146
  143. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +27 -23
  144. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +173 -74
  145. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +362 -341
  146. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2056 -845
  147. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +11 -11
  148. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +49 -16
  149. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +56 -50
  150. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +293 -111
  151. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +3 -3
  152. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -0
  153. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +3 -3
  154. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +10 -2
  155. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +5 -5
  156. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +26 -10
  157. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +5 -5
  158. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +27 -12
  159. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +17 -16
  160. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +83 -36
  161. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +2 -2
  162. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +7 -2
  163. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +8 -8
  164. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +46 -17
  165. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +9 -9
  166. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +38 -12
  167. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +7 -7
  168. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +30 -10
  169. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +2 -2
  170. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +10 -6
  171. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +15 -15
  172. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +71 -28
  173. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +25 -25
  174. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +149 -65
  175. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +8 -7
  176. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +30 -12
  177. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +9 -9
  178. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +42 -15
  179. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +173 -144
  180. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +898 -323
  181. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +51 -45
  182. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +261 -116
  183. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +13 -13
  184. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +70 -25
  185. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +80 -55
  186. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +410 -124
  187. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +5 -5
  188. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +23 -9
  189. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  190. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +44 -44
  191. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +261 -122
  192. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +8 -8
  193. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +47 -21
  194. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +32 -32
  195. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +175 -66
  196. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +4 -4
  197. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +17 -6
  198. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +8 -8
  199. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +38 -17
  200. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +8 -8
  201. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +12 -0
  202. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +7 -7
  203. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +43 -18
  204. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +3 -3
  205. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +20 -9
  206. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +3 -3
  207. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +24 -9
  208. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +2 -2
  209. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +14 -6
  210. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +8 -8
  211. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +40 -16
  212. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +9 -9
  213. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +70 -25
  214. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +5 -5
  215. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +37 -18
  216. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +12 -12
  217. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +81 -30
  218. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +16 -16
  219. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +76 -30
  220. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +20 -20
  221. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +90 -30
  222. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +7 -7
  223. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +28 -10
  224. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +2 -2
  225. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +3 -0
  226. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +5 -5
  227. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +13 -4
  228. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +9 -9
  229. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -0
  230. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +4 -4
  231. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +9 -0
  232. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +5 -5
  233. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +17 -4
  234. data/src/core/ext/upb-generated/google/api/annotations.upb.c +3 -3
  235. data/src/core/ext/upb-generated/google/api/annotations.upb.h +17 -2
  236. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +70 -66
  237. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +410 -162
  238. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +80 -74
  239. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +440 -158
  240. data/src/core/ext/upb-generated/google/api/http.upb.c +17 -17
  241. data/src/core/ext/upb-generated/google/api/http.upb.h +116 -43
  242. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +4 -4
  243. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +19 -7
  244. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +3 -3
  245. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -0
  246. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +163 -162
  247. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1157 -435
  248. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +3 -3
  249. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +10 -4
  250. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  251. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +15 -15
  252. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +108 -40
  253. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +3 -3
  254. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +10 -4
  255. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +18 -18
  256. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -0
  257. data/src/core/ext/upb-generated/google/rpc/status.upb.c +4 -4
  258. data/src/core/ext/upb-generated/google/rpc/status.upb.h +19 -7
  259. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +15 -15
  260. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +65 -22
  261. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +12 -12
  262. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +49 -12
  263. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +69 -65
  264. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +364 -149
  265. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +8 -7
  266. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +20 -4
  267. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +4 -4
  268. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -0
  269. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +31 -31
  270. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +150 -58
  271. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +11 -11
  272. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +51 -18
  273. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
  274. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +764 -0
  275. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +22 -22
  276. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +97 -10
  277. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +6 -6
  278. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +23 -2
  279. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +3 -3
  280. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +10 -2
  281. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +6 -6
  282. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +27 -6
  283. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +5 -5
  284. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +20 -2
  285. data/src/core/ext/upb-generated/validate/validate.upb.c +261 -250
  286. data/src/core/ext/upb-generated/validate/validate.upb.h +1836 -663
  287. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +22 -22
  288. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +97 -10
  289. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +6 -6
  290. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +23 -2
  291. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +3 -3
  292. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +10 -2
  293. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +18 -18
  294. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +70 -10
  295. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +5 -5
  296. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +20 -2
  297. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +2 -2
  298. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +3 -0
  299. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +8 -8
  300. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +38 -12
  301. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +5 -5
  302. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +27 -10
  303. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +3 -3
  304. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +10 -2
  305. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +5 -5
  306. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +21 -8
  307. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +10 -10
  308. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +71 -30
  309. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +5 -5
  310. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +16 -2
  311. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +12 -12
  312. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +69 -26
  313. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +43 -39
  314. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +255 -103
  315. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +4 -4
  316. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +19 -8
  317. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +9 -9
  318. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +70 -25
  319. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +3 -3
  320. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +10 -2
  321. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +50 -46
  322. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +195 -185
  323. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +16 -12
  324. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +129 -94
  325. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +10 -0
  326. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +18 -33
  327. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +0 -5
  328. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +163 -155
  329. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +5 -0
  330. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +141 -138
  331. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +26 -20
  332. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +738 -730
  333. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +271 -251
  334. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
  335. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +207 -193
  336. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +5 -0
  337. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
  338. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
  339. data/src/core/ext/xds/certificate_provider_store.cc +8 -0
  340. data/src/core/ext/xds/certificate_provider_store.h +9 -0
  341. data/src/core/ext/xds/xds_api.cc +20 -0
  342. data/src/core/ext/xds/xds_bootstrap.cc +2 -2
  343. data/src/core/ext/xds/xds_bootstrap.h +2 -0
  344. data/src/core/ext/xds/xds_certificate_provider.cc +2 -0
  345. data/src/core/ext/xds/xds_certificate_provider.h +8 -0
  346. data/src/core/ext/xds/xds_client.cc +87 -95
  347. data/src/core/ext/xds/xds_client.h +13 -5
  348. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +142 -0
  349. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +79 -0
  350. data/src/core/ext/xds/xds_common_types.cc +9 -9
  351. data/src/core/ext/xds/xds_common_types.h +3 -3
  352. data/src/core/ext/xds/xds_endpoint.cc +12 -5
  353. data/src/core/ext/xds/xds_http_fault_filter.cc +1 -1
  354. data/src/core/ext/xds/xds_listener.cc +1 -1
  355. data/src/core/ext/xds/xds_route_config.cc +162 -25
  356. data/src/core/ext/xds/xds_route_config.h +13 -10
  357. data/src/core/ext/xds/xds_server_config_fetcher.cc +17 -22
  358. data/src/core/lib/avl/avl.h +68 -5
  359. data/src/core/lib/channel/call_tracer.h +4 -1
  360. data/src/core/lib/channel/channel_args.cc +138 -59
  361. data/src/core/lib/channel/channel_args.h +210 -9
  362. data/src/core/lib/channel/channel_args_preconditioning.cc +3 -9
  363. data/src/core/lib/channel/channel_args_preconditioning.h +1 -2
  364. data/src/core/lib/channel/channel_stack.h +2 -5
  365. data/src/core/lib/channel/channel_stack_builder.cc +0 -65
  366. data/src/core/lib/channel/channel_stack_builder.h +27 -6
  367. data/src/core/lib/channel/channel_stack_builder_impl.cc +102 -0
  368. data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
  369. data/src/core/lib/channel/connected_channel.h +1 -0
  370. data/src/core/lib/channel/promise_based_filter.cc +495 -162
  371. data/src/core/lib/channel/promise_based_filter.h +55 -41
  372. data/src/core/lib/compression/compression_internal.cc +1 -7
  373. data/src/core/lib/debug/stats_data.cc +2 -6
  374. data/src/core/lib/debug/stats_data.h +18 -21
  375. data/src/core/lib/gpr/tls.h +1 -0
  376. data/src/core/lib/gprpp/bitset.h +12 -0
  377. data/src/core/lib/gprpp/cpp_impl_of.h +4 -0
  378. data/src/core/lib/gprpp/match.h +73 -0
  379. data/src/core/lib/gprpp/overload.h +59 -0
  380. data/src/core/lib/gprpp/ref_counted.h +2 -0
  381. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  382. data/src/core/lib/gprpp/status_helper.cc +18 -2
  383. data/src/core/lib/gprpp/time.cc +12 -0
  384. data/src/core/lib/gprpp/time.h +1 -1
  385. data/src/core/lib/http/format_request.cc +1 -2
  386. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  387. data/src/core/lib/http/parser.cc +80 -9
  388. data/src/core/lib/http/parser.h +14 -1
  389. data/src/core/lib/iomgr/ev_posix.cc +6 -7
  390. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  391. data/src/core/lib/iomgr/port.h +0 -2
  392. data/src/core/lib/iomgr/tcp_client_posix.cc +2 -2
  393. data/src/core/lib/iomgr/tcp_posix.cc +93 -35
  394. data/src/core/lib/iomgr/tcp_server_posix.cc +26 -17
  395. data/src/core/lib/json/json_util.h +3 -3
  396. data/src/core/lib/promise/call_push_pull.h +144 -0
  397. data/src/core/lib/promise/detail/status.h +2 -1
  398. data/src/core/lib/promise/intra_activity_waiter.h +49 -0
  399. data/src/core/lib/promise/latch.h +104 -0
  400. data/src/core/lib/resource_quota/api.cc +5 -30
  401. data/src/core/lib/resource_quota/api.h +1 -1
  402. data/src/core/lib/resource_quota/resource_quota.h +8 -0
  403. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  404. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +9 -12
  405. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +5 -6
  406. data/src/core/lib/security/context/security_context.h +8 -1
  407. data/src/core/lib/security/credentials/alts/alts_credentials.cc +6 -5
  408. data/src/core/lib/security/credentials/alts/alts_credentials.h +4 -0
  409. data/src/core/lib/security/credentials/call_creds_util.cc +3 -3
  410. data/src/core/lib/security/credentials/call_creds_util.h +2 -2
  411. data/src/core/lib/security/credentials/composite/composite_credentials.cc +15 -10
  412. data/src/core/lib/security/credentials/composite/composite_credentials.h +9 -8
  413. data/src/core/lib/security/credentials/credentials.h +16 -33
  414. data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -12
  415. data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -5
  416. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +4 -0
  417. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +3 -3
  418. data/src/core/lib/security/credentials/iam/iam_credentials.cc +5 -4
  419. data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -2
  420. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +22 -29
  421. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +57 -0
  422. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -3
  423. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +6 -2
  424. data/src/core/lib/security/credentials/local/local_credentials.cc +6 -6
  425. data/src/core/lib/security/credentials/local/local_credentials.h +4 -0
  426. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +17 -9
  427. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +14 -6
  428. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -6
  429. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +8 -6
  430. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +6 -4
  431. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +8 -0
  432. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +49 -0
  433. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +8 -0
  434. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +42 -3
  435. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +66 -95
  436. data/src/core/lib/security/credentials/tls/tls_credentials.cc +9 -6
  437. data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -5
  438. data/src/core/lib/security/credentials/xds/xds_credentials.cc +48 -50
  439. data/src/core/lib/security/credentials/xds/xds_credentials.h +31 -5
  440. data/src/core/lib/security/security_connector/local/local_security_connector.cc +2 -2
  441. data/src/core/lib/security/security_connector/security_connector.h +9 -0
  442. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -2
  443. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -2
  444. data/src/core/lib/security/transport/auth_filters.h +7 -7
  445. data/src/core/lib/security/transport/client_auth_filter.cc +28 -20
  446. data/src/core/lib/security/transport/secure_endpoint.cc +198 -129
  447. data/src/core/lib/security/transport/secure_endpoint.h +1 -1
  448. data/src/core/lib/security/transport/security_handshaker.cc +6 -4
  449. data/src/core/lib/surface/call.cc +1023 -903
  450. data/src/core/lib/surface/call.h +0 -14
  451. data/src/core/lib/surface/channel.cc +4 -3
  452. data/src/core/lib/surface/channel_init.cc +2 -3
  453. data/src/core/lib/surface/channel_init.h +2 -6
  454. data/src/core/lib/surface/init.cc +1 -1
  455. data/src/core/lib/surface/server.cc +3 -14
  456. data/src/core/lib/surface/server.h +1 -2
  457. data/src/core/lib/surface/version.cc +2 -2
  458. data/src/core/lib/transport/byte_stream.cc +2 -0
  459. data/src/core/lib/transport/metadata_batch.h +12 -8
  460. data/src/core/lib/transport/transport.h +20 -5
  461. data/src/core/lib/transport/transport_impl.h +4 -3
  462. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -4
  463. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -2
  464. data/src/core/tsi/ssl_transport_security.cc +75 -38
  465. data/src/core/tsi/ssl_transport_security.h +8 -2
  466. data/src/core/tsi/transport_security_interface.h +2 -0
  467. data/src/ruby/ext/grpc/extconf.rb +1 -1
  468. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  469. data/src/ruby/lib/grpc/grpc.rb +1 -1
  470. data/src/ruby/lib/grpc/version.rb +1 -1
  471. data/src/ruby/pb/generate_proto_ruby.sh +1 -0
  472. data/src/ruby/pb/test/client.rb +769 -0
  473. data/src/ruby/pb/test/server.rb +252 -0
  474. data/src/ruby/pb/test/xds_client.rb +415 -0
  475. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  476. data/third_party/upb/upb/decode.c +32 -16
  477. data/third_party/upb/upb/def.c +118 -55
  478. data/third_party/upb/upb/def.h +12 -3
  479. data/third_party/upb/upb/encode.c +14 -8
  480. data/third_party/upb/upb/json_encode.c +776 -0
  481. data/third_party/upb/upb/json_encode.h +62 -0
  482. data/third_party/upb/upb/msg.c +5 -7
  483. data/third_party/upb/upb/msg.h +1 -2
  484. data/third_party/upb/upb/msg_internal.h +49 -36
  485. data/third_party/upb/upb/port_def.inc +8 -0
  486. data/third_party/upb/upb/port_undef.inc +1 -0
  487. data/third_party/upb/upb/table.c +10 -6
  488. data/third_party/upb/upb/table_internal.h +2 -0
  489. data/third_party/upb/upb/upb.h +41 -11
  490. data/third_party/zlib/crc32.c +966 -292
  491. data/third_party/zlib/crc32.h +9441 -436
  492. data/third_party/zlib/deflate.c +78 -30
  493. data/third_party/zlib/deflate.h +12 -15
  494. data/third_party/zlib/gzguts.h +3 -2
  495. data/third_party/zlib/gzlib.c +5 -3
  496. data/third_party/zlib/gzread.c +5 -7
  497. data/third_party/zlib/gzwrite.c +25 -13
  498. data/third_party/zlib/infback.c +2 -1
  499. data/third_party/zlib/inffast.c +14 -14
  500. data/third_party/zlib/inflate.c +39 -8
  501. data/third_party/zlib/inflate.h +3 -2
  502. data/third_party/zlib/inftrees.c +3 -3
  503. data/third_party/zlib/trees.c +27 -48
  504. data/third_party/zlib/zlib.h +123 -100
  505. data/third_party/zlib/zutil.c +2 -2
  506. data/third_party/zlib/zutil.h +12 -9
  507. metadata +66 -45
  508. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -201
  509. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -566
  510. data/src/core/ext/filters/max_age/max_age_filter.h +0 -26
  511. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1657
  512. data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
  513. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
  514. data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
  515. data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
@@ -27,6 +27,7 @@
27
27
  #include <grpc/support/log.h>
28
28
 
29
29
  #include "src/core/lib/channel/call_finalization.h"
30
+ #include "src/core/lib/channel/channel_args.h"
30
31
  #include "src/core/lib/channel/channel_stack.h"
31
32
  #include "src/core/lib/channel/context.h"
32
33
  #include "src/core/lib/gprpp/debug_location.h"
@@ -42,21 +43,25 @@ class ChannelFilter {
42
43
  public:
43
44
  class Args {
44
45
  public:
45
- Args() : Args(nullptr) {}
46
- explicit Args(grpc_channel_stack* channel_stack)
47
- : channel_stack_(channel_stack) {}
46
+ Args() : Args(nullptr, nullptr) {}
47
+ explicit Args(grpc_channel_stack* channel_stack,
48
+ grpc_channel_element* channel_element)
49
+ : channel_stack_(channel_stack), channel_element_(channel_element) {}
48
50
 
49
51
  grpc_channel_stack* channel_stack() const { return channel_stack_; }
52
+ grpc_channel_element* uninitialized_channel_element() {
53
+ return channel_element_;
54
+ }
50
55
 
51
56
  private:
52
57
  friend class ChannelFilter;
53
58
  grpc_channel_stack* channel_stack_;
59
+ grpc_channel_element* channel_element_;
54
60
  };
55
61
 
56
62
  // Construct a promise for one call.
57
- virtual ArenaPromise<TrailingMetadata> MakeCallPromise(
58
- ClientInitialMetadata initial_metadata,
59
- NextPromiseFactory next_promise_factory) = 0;
63
+ virtual ArenaPromise<ServerMetadataHandle> MakeCallPromise(
64
+ CallArgs call_args, NextPromiseFactory next_promise_factory) = 0;
60
65
 
61
66
  // Start a legacy transport op
62
67
  // Return true if the op was handled, false if it should be passed to the
@@ -65,7 +70,6 @@ class ChannelFilter {
65
70
  // structures going forward.
66
71
  virtual bool StartTransportOp(grpc_transport_op*) { return false; }
67
72
 
68
- protected:
69
73
  virtual ~ChannelFilter() = default;
70
74
  };
71
75
 
@@ -77,20 +81,22 @@ enum class FilterEndpoint {
77
81
  kServer,
78
82
  };
79
83
 
84
+ // Flags for MakePromiseBasedFilter.
85
+ static constexpr uint8_t kFilterExaminesServerInitialMetadata = 1;
86
+
80
87
  namespace promise_filter_detail {
81
88
 
82
89
  // Call data shared between all implementations of promise-based filters.
83
90
  class BaseCallData : public Activity, private Wakeable {
84
91
  public:
85
- BaseCallData(grpc_call_element* elem, const grpc_call_element_args* args)
86
- : call_stack_(args->call_stack),
87
- elem_(elem),
88
- arena_(args->arena),
89
- call_combiner_(args->call_combiner),
90
- deadline_(args->deadline),
91
- context_(args->context) {}
92
+ BaseCallData(grpc_call_element* elem, const grpc_call_element_args* args,
93
+ uint8_t flags);
94
+ ~BaseCallData() override;
92
95
 
93
- void set_pollent(grpc_polling_entity* pollent) { pollent_ = pollent; }
96
+ void set_pollent(grpc_polling_entity* pollent) {
97
+ GPR_ASSERT(nullptr ==
98
+ pollent_.exchange(pollent, std::memory_order_release));
99
+ }
94
100
 
95
101
  // Activity implementation (partial).
96
102
  void Orphan() final;
@@ -112,7 +118,8 @@ class BaseCallData : public Activity, private Wakeable {
112
118
  : promise_detail::Context<Arena>(call_data->arena_),
113
119
  promise_detail::Context<grpc_call_context_element>(
114
120
  call_data->context_),
115
- promise_detail::Context<grpc_polling_entity>(call_data->pollent_),
121
+ promise_detail::Context<grpc_polling_entity>(
122
+ call_data->pollent_.load(std::memory_order_acquire)),
116
123
  promise_detail::Context<CallFinalization>(&call_data->finalization_) {
117
124
  }
118
125
  };
@@ -127,10 +134,14 @@ class BaseCallData : public Activity, private Wakeable {
127
134
  return p.Unwrap();
128
135
  }
129
136
 
137
+ Arena* arena() { return arena_; }
130
138
  grpc_call_element* elem() const { return elem_; }
131
139
  CallCombiner* call_combiner() const { return call_combiner_; }
132
140
  Timestamp deadline() const { return deadline_; }
133
141
  grpc_call_stack* call_stack() const { return call_stack_; }
142
+ Latch<ServerMetadata*>* server_initial_metadata_latch() const {
143
+ return server_initial_metadata_latch_;
144
+ }
134
145
 
135
146
  private:
136
147
  // Wakeable implementation.
@@ -146,12 +157,14 @@ class BaseCallData : public Activity, private Wakeable {
146
157
  const Timestamp deadline_;
147
158
  CallFinalization finalization_;
148
159
  grpc_call_context_element* const context_;
149
- grpc_polling_entity* pollent_ = nullptr;
160
+ std::atomic<grpc_polling_entity*> pollent_{nullptr};
161
+ Latch<ServerMetadata*>* server_initial_metadata_latch_ = nullptr;
150
162
  };
151
163
 
152
164
  class ClientCallData : public BaseCallData {
153
165
  public:
154
- ClientCallData(grpc_call_element* elem, const grpc_call_element_args* args);
166
+ ClientCallData(grpc_call_element* elem, const grpc_call_element_args* args,
167
+ uint8_t flags);
155
168
  ~ClientCallData() override;
156
169
 
157
170
  // Activity implementation.
@@ -192,6 +205,9 @@ class ClientCallData : public BaseCallData {
192
205
  kCancelled
193
206
  };
194
207
 
208
+ struct RecvInitialMetadata;
209
+ class PollContext;
210
+
195
211
  // Handle cancellation.
196
212
  void Cancel(grpc_error_handle error);
197
213
  // Begin running the promise - which will ultimately take some initial
@@ -205,17 +221,17 @@ class ClientCallData : public BaseCallData {
205
221
  // Effectively:
206
222
  // - put the modified initial metadata into the batch to be sent down.
207
223
  // - return a wrapper around PollTrailingMetadata as the promise.
208
- ArenaPromise<TrailingMetadata> MakeNextPromise(
209
- ClientInitialMetadata initial_metadata);
224
+ ArenaPromise<ServerMetadataHandle> MakeNextPromise(CallArgs call_args);
210
225
  // Wrapper to make it look like we're calling the next filter as a promise.
211
226
  // First poll: send the send_initial_metadata op down the stack.
212
227
  // All polls: await receiving the trailing metadata, then return it to the
213
228
  // application.
214
- Poll<TrailingMetadata> PollTrailingMetadata();
229
+ Poll<ServerMetadataHandle> PollTrailingMetadata();
215
230
  static void RecvTrailingMetadataReadyCallback(void* arg,
216
231
  grpc_error_handle error);
217
232
  void RecvTrailingMetadataReady(grpc_error_handle error);
218
- // Given an error, fill in TrailingMetadata to represent that error.
233
+ void RecvInitialMetadataReady(grpc_error_handle error);
234
+ // Given an error, fill in ServerMetadataHandle to represent that error.
219
235
  void SetStatusFromError(grpc_metadata_batch* metadata,
220
236
  grpc_error_handle error);
221
237
  // Wakeup and poll the promise if appropriate.
@@ -223,11 +239,13 @@ class ClientCallData : public BaseCallData {
223
239
  void OnWakeup() override;
224
240
 
225
241
  // Contained promise
226
- ArenaPromise<TrailingMetadata> promise_;
242
+ ArenaPromise<ServerMetadataHandle> promise_;
227
243
  // Queued batch containing at least a send_initial_metadata op.
228
244
  grpc_transport_stream_op_batch* send_initial_metadata_batch_ = nullptr;
229
245
  // Pointer to where trailing metadata will be stored.
230
246
  grpc_metadata_batch* recv_trailing_metadata_ = nullptr;
247
+ // State tracking recv initial metadata for filters that care about it.
248
+ RecvInitialMetadata* recv_initial_metadata_ = nullptr;
231
249
  // Closure to call when we're done with the trailing metadata.
232
250
  grpc_closure* original_recv_trailing_metadata_ready_ = nullptr;
233
251
  // Our closure pointing to RecvTrailingMetadataReadyCallback.
@@ -238,17 +256,14 @@ class ClientCallData : public BaseCallData {
238
256
  SendInitialState send_initial_state_ = SendInitialState::kInitial;
239
257
  // State of the recv_trailing_metadata op.
240
258
  RecvTrailingState recv_trailing_state_ = RecvTrailingState::kInitial;
241
- // Whether we're currently polling the promise.
242
- bool is_polling_ = false;
243
- // Should we repoll after completing polling?
244
- bool repoll_ = false;
245
- // Whether we should forward send initial metadata after polling?
246
- bool forward_send_initial_metadata_ = false;
259
+ // Polling related data. Non-null if we're actively polling
260
+ PollContext* poll_ctx_ = nullptr;
247
261
  };
248
262
 
249
263
  class ServerCallData : public BaseCallData {
250
264
  public:
251
- ServerCallData(grpc_call_element* elem, const grpc_call_element_args* args);
265
+ ServerCallData(grpc_call_element* elem, const grpc_call_element_args* args,
266
+ uint8_t flags);
252
267
  ~ServerCallData() override;
253
268
 
254
269
  // Activity implementation.
@@ -289,12 +304,11 @@ class ServerCallData : public BaseCallData {
289
304
  // Effectively:
290
305
  // - put the modified initial metadata into the batch being sent up.
291
306
  // - return a wrapper around PollTrailingMetadata as the promise.
292
- ArenaPromise<TrailingMetadata> MakeNextPromise(
293
- ClientInitialMetadata initial_metadata);
307
+ ArenaPromise<ServerMetadataHandle> MakeNextPromise(CallArgs call_args);
294
308
  // Wrapper to make it look like we're calling the next filter as a promise.
295
309
  // All polls: await sending the trailing metadata, then foward it down the
296
310
  // stack.
297
- Poll<TrailingMetadata> PollTrailingMetadata();
311
+ Poll<ServerMetadataHandle> PollTrailingMetadata();
298
312
  static void RecvInitialMetadataReadyCallback(void* arg,
299
313
  grpc_error_handle error);
300
314
  void RecvInitialMetadataReady(grpc_error_handle error);
@@ -303,7 +317,7 @@ class ServerCallData : public BaseCallData {
303
317
  void OnWakeup() override;
304
318
 
305
319
  // Contained promise
306
- ArenaPromise<TrailingMetadata> promise_;
320
+ ArenaPromise<ServerMetadataHandle> promise_;
307
321
  // Pointer to where initial metadata will be stored.
308
322
  grpc_metadata_batch* recv_initial_metadata_ = nullptr;
309
323
  // Closure to call when we're done with the trailing metadata.
@@ -351,11 +365,11 @@ class CallData<ChannelFilter, FilterEndpoint::kServer> : public ServerCallData {
351
365
  // class SomeChannelFilter : public ChannelFilter {
352
366
  // public:
353
367
  // static absl::StatusOr<SomeChannelFilter> Create(
354
- // ChannelFilter::Args filter_args);
368
+ // ChannelArgs channel_args, ChannelFilter::Args filter_args);
355
369
  // };
356
370
  // TODO(ctiller): allow implementing get_channel_info, start_transport_op in
357
371
  // some way on ChannelFilter.
358
- template <typename F, FilterEndpoint kEndpoint>
372
+ template <typename F, FilterEndpoint kEndpoint, uint8_t kFlags = 0>
359
373
  absl::enable_if_t<std::is_base_of<ChannelFilter, F>::value, grpc_channel_filter>
360
374
  MakePromiseBasedFilter(const char* name) {
361
375
  using CallData = promise_filter_detail::CallData<F, kEndpoint>;
@@ -366,10 +380,10 @@ MakePromiseBasedFilter(const char* name) {
366
380
  static_cast<CallData*>(elem->call_data)->StartBatch(batch);
367
381
  },
368
382
  // make_call_promise
369
- [](grpc_channel_element* elem, ClientInitialMetadata initial_metadata,
383
+ [](grpc_channel_element* elem, CallArgs call_args,
370
384
  NextPromiseFactory next_promise_factory) {
371
385
  return static_cast<F*>(elem->channel_data)
372
- ->MakeCallPromise(std::move(initial_metadata),
386
+ ->MakeCallPromise(std::move(call_args),
373
387
  std::move(next_promise_factory));
374
388
  },
375
389
  // start_transport_op
@@ -382,7 +396,7 @@ MakePromiseBasedFilter(const char* name) {
382
396
  sizeof(CallData),
383
397
  // init_call_elem
384
398
  [](grpc_call_element* elem, const grpc_call_element_args* args) {
385
- new (elem->call_data) CallData(elem, args);
399
+ new (elem->call_data) CallData(elem, args, kFlags);
386
400
  return GRPC_ERROR_NONE;
387
401
  },
388
402
  // set_pollset_or_pollset_set
@@ -401,8 +415,8 @@ MakePromiseBasedFilter(const char* name) {
401
415
  // init_channel_elem
402
416
  [](grpc_channel_element* elem, grpc_channel_element_args* args) {
403
417
  GPR_ASSERT(!args->is_last);
404
- auto status = F::Create(args->channel_args,
405
- ChannelFilter::Args(args->channel_stack));
418
+ auto status = F::Create(ChannelArgs::FromC(args->channel_args),
419
+ ChannelFilter::Args(args->channel_stack, elem));
406
420
  if (!status.ok()) return absl_status_to_grpc_error(status.status());
407
421
  new (elem->channel_data) F(std::move(*status));
408
422
  return GRPC_ERROR_NONE;
@@ -194,13 +194,7 @@ CompressionAlgorithmSet CompressionAlgorithmSet::FromString(
194
194
  }
195
195
 
196
196
  uint32_t CompressionAlgorithmSet::ToLegacyBitmask() const {
197
- uint32_t x = 0;
198
- for (size_t i = 0; i < GRPC_COMPRESS_ALGORITHMS_COUNT; i++) {
199
- if (set_.is_set(i)) {
200
- x |= (1u << i);
201
- }
202
- }
203
- return x;
197
+ return set_.ToInt<uint32_t>();
204
198
  }
205
199
 
206
200
  absl::optional<grpc_compression_algorithm>
@@ -41,8 +41,6 @@ const char* grpc_stats_counter_name[GRPC_STATS_COUNTER_COUNT] = {
41
41
  "pollset_kick_wakeup_fd",
42
42
  "pollset_kick_wakeup_cv",
43
43
  "pollset_kick_own_thread",
44
- "syscall_epoll_ctl",
45
- "pollset_fd_cache_hits",
46
44
  "histogram_slow_lookups",
47
45
  "syscall_write",
48
46
  "syscall_read",
@@ -75,6 +73,7 @@ const char* grpc_stats_counter_name[GRPC_STATS_COUNTER_COUNT] = {
75
73
  "http2_initiate_write_due_to_stream_flow_control",
76
74
  "http2_initiate_write_due_to_transport_flow_control",
77
75
  "http2_initiate_write_due_to_send_settings",
76
+ "http2_initiate_write_due_to_settings_ack",
78
77
  "http2_initiate_write_due_to_bdp_estimator_ping",
79
78
  "http2_initiate_write_due_to_flow_control_unstalled_by_setting",
80
79
  "http2_initiate_write_due_to_flow_control_unstalled_by_update",
@@ -147,9 +146,6 @@ const char* grpc_stats_counter_doc[GRPC_STATS_COUNTER_COUNT] = {
147
146
  "polling wakeup (only valid for epoll1 right now)",
148
147
  "How many times could a polling wakeup be satisfied by keeping the waking "
149
148
  "thread awake? (only valid for epoll1 right now)",
150
- "Number of epoll_ctl calls made (only valid for epollex right now)",
151
- "Number of epoll_ctl calls skipped because the fd was cached as already "
152
- "being added. (only valid for epollex right now)",
153
149
  "Number of times histogram increments went through the slow (binary "
154
150
  "search) path",
155
151
  "Number of write syscalls (or equivalent - eg sendmsg) made by this "
@@ -186,6 +182,7 @@ const char* grpc_stats_counter_doc[GRPC_STATS_COUNTER_COUNT] = {
186
182
  "Number of HTTP2 writes initiated due to 'stream_flow_control'",
187
183
  "Number of HTTP2 writes initiated due to 'transport_flow_control'",
188
184
  "Number of HTTP2 writes initiated due to 'send_settings'",
185
+ "Number of HTTP2 writes initiated due to 'settings_ack'",
189
186
  "Number of HTTP2 writes initiated due to 'bdp_estimator_ping'",
190
187
  "Number of HTTP2 writes initiated due to "
191
188
  "'flow_control_unstalled_by_setting'",
@@ -281,7 +278,6 @@ const char* grpc_stats_histogram_doc[GRPC_STATS_HISTOGRAM_COUNT] = {
281
278
  "Number of streams whose payload was written per TCP write",
282
279
  "Number of streams terminated per TCP write",
283
280
  "Number of flow control updates written per TCP write",
284
- // NOLINTNEXTLINE(bugprone-suspicious-missing-comma)
285
281
  "How many completion queues were checked looking for a CQ that had "
286
282
  "requested the incoming call",
287
283
  };
@@ -42,8 +42,6 @@ typedef enum {
42
42
  GRPC_STATS_COUNTER_POLLSET_KICK_WAKEUP_FD,
43
43
  GRPC_STATS_COUNTER_POLLSET_KICK_WAKEUP_CV,
44
44
  GRPC_STATS_COUNTER_POLLSET_KICK_OWN_THREAD,
45
- GRPC_STATS_COUNTER_SYSCALL_EPOLL_CTL,
46
- GRPC_STATS_COUNTER_POLLSET_FD_CACHE_HITS,
47
45
  GRPC_STATS_COUNTER_HISTOGRAM_SLOW_LOOKUPS,
48
46
  GRPC_STATS_COUNTER_SYSCALL_WRITE,
49
47
  GRPC_STATS_COUNTER_SYSCALL_READ,
@@ -76,6 +74,7 @@ typedef enum {
76
74
  GRPC_STATS_COUNTER_HTTP2_INITIATE_WRITE_DUE_TO_STREAM_FLOW_CONTROL,
77
75
  GRPC_STATS_COUNTER_HTTP2_INITIATE_WRITE_DUE_TO_TRANSPORT_FLOW_CONTROL,
78
76
  GRPC_STATS_COUNTER_HTTP2_INITIATE_WRITE_DUE_TO_SEND_SETTINGS,
77
+ GRPC_STATS_COUNTER_HTTP2_INITIATE_WRITE_DUE_TO_SETTINGS_ACK,
79
78
  GRPC_STATS_COUNTER_HTTP2_INITIATE_WRITE_DUE_TO_BDP_ESTIMATOR_PING,
80
79
  GRPC_STATS_COUNTER_HTTP2_INITIATE_WRITE_DUE_TO_FLOW_CONTROL_UNSTALLED_BY_SETTING,
81
80
  GRPC_STATS_COUNTER_HTTP2_INITIATE_WRITE_DUE_TO_FLOW_CONTROL_UNSTALLED_BY_UPDATE,
@@ -206,10 +205,6 @@ typedef enum {
206
205
  GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_POLLSET_KICK_WAKEUP_CV)
207
206
  #define GRPC_STATS_INC_POLLSET_KICK_OWN_THREAD() \
208
207
  GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_POLLSET_KICK_OWN_THREAD)
209
- #define GRPC_STATS_INC_SYSCALL_EPOLL_CTL() \
210
- GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_SYSCALL_EPOLL_CTL)
211
- #define GRPC_STATS_INC_POLLSET_FD_CACHE_HITS() \
212
- GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_POLLSET_FD_CACHE_HITS)
213
208
  #define GRPC_STATS_INC_HISTOGRAM_SLOW_LOOKUPS() \
214
209
  GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_HISTOGRAM_SLOW_LOOKUPS)
215
210
  #define GRPC_STATS_INC_SYSCALL_WRITE() \
@@ -287,6 +282,9 @@ typedef enum {
287
282
  #define GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_SEND_SETTINGS() \
288
283
  GRPC_STATS_INC_COUNTER( \
289
284
  GRPC_STATS_COUNTER_HTTP2_INITIATE_WRITE_DUE_TO_SEND_SETTINGS)
285
+ #define GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_SETTINGS_ACK() \
286
+ GRPC_STATS_INC_COUNTER( \
287
+ GRPC_STATS_COUNTER_HTTP2_INITIATE_WRITE_DUE_TO_SETTINGS_ACK)
290
288
  #define GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_BDP_ESTIMATOR_PING() \
291
289
  GRPC_STATS_INC_COUNTER( \
292
290
  GRPC_STATS_COUNTER_HTTP2_INITIATE_WRITE_DUE_TO_BDP_ESTIMATOR_PING)
@@ -398,43 +396,43 @@ typedef enum {
398
396
  GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_CQ_EV_QUEUE_TRANSIENT_POP_FAILURES)
399
397
  #define GRPC_STATS_INC_CALL_INITIAL_SIZE(value) \
400
398
  grpc_stats_inc_call_initial_size((int)(value))
401
- void grpc_stats_inc_call_initial_size(int value);
399
+ void grpc_stats_inc_call_initial_size(int x);
402
400
  #define GRPC_STATS_INC_POLL_EVENTS_RETURNED(value) \
403
401
  grpc_stats_inc_poll_events_returned((int)(value))
404
- void grpc_stats_inc_poll_events_returned(int value);
402
+ void grpc_stats_inc_poll_events_returned(int x);
405
403
  #define GRPC_STATS_INC_TCP_WRITE_SIZE(value) \
406
404
  grpc_stats_inc_tcp_write_size((int)(value))
407
- void grpc_stats_inc_tcp_write_size(int value);
405
+ void grpc_stats_inc_tcp_write_size(int x);
408
406
  #define GRPC_STATS_INC_TCP_WRITE_IOV_SIZE(value) \
409
407
  grpc_stats_inc_tcp_write_iov_size((int)(value))
410
- void grpc_stats_inc_tcp_write_iov_size(int value);
408
+ void grpc_stats_inc_tcp_write_iov_size(int x);
411
409
  #define GRPC_STATS_INC_TCP_READ_SIZE(value) \
412
410
  grpc_stats_inc_tcp_read_size((int)(value))
413
- void grpc_stats_inc_tcp_read_size(int value);
411
+ void grpc_stats_inc_tcp_read_size(int x);
414
412
  #define GRPC_STATS_INC_TCP_READ_OFFER(value) \
415
413
  grpc_stats_inc_tcp_read_offer((int)(value))
416
- void grpc_stats_inc_tcp_read_offer(int value);
414
+ void grpc_stats_inc_tcp_read_offer(int x);
417
415
  #define GRPC_STATS_INC_TCP_READ_OFFER_IOV_SIZE(value) \
418
416
  grpc_stats_inc_tcp_read_offer_iov_size((int)(value))
419
- void grpc_stats_inc_tcp_read_offer_iov_size(int value);
417
+ void grpc_stats_inc_tcp_read_offer_iov_size(int x);
420
418
  #define GRPC_STATS_INC_HTTP2_SEND_MESSAGE_SIZE(value) \
421
419
  grpc_stats_inc_http2_send_message_size((int)(value))
422
- void grpc_stats_inc_http2_send_message_size(int value);
420
+ void grpc_stats_inc_http2_send_message_size(int x);
423
421
  #define GRPC_STATS_INC_HTTP2_SEND_INITIAL_METADATA_PER_WRITE(value) \
424
422
  grpc_stats_inc_http2_send_initial_metadata_per_write((int)(value))
425
- void grpc_stats_inc_http2_send_initial_metadata_per_write(int value);
423
+ void grpc_stats_inc_http2_send_initial_metadata_per_write(int x);
426
424
  #define GRPC_STATS_INC_HTTP2_SEND_MESSAGE_PER_WRITE(value) \
427
425
  grpc_stats_inc_http2_send_message_per_write((int)(value))
428
- void grpc_stats_inc_http2_send_message_per_write(int value);
426
+ void grpc_stats_inc_http2_send_message_per_write(int x);
429
427
  #define GRPC_STATS_INC_HTTP2_SEND_TRAILING_METADATA_PER_WRITE(value) \
430
428
  grpc_stats_inc_http2_send_trailing_metadata_per_write((int)(value))
431
- void grpc_stats_inc_http2_send_trailing_metadata_per_write(int value);
429
+ void grpc_stats_inc_http2_send_trailing_metadata_per_write(int x);
432
430
  #define GRPC_STATS_INC_HTTP2_SEND_FLOWCTL_PER_WRITE(value) \
433
431
  grpc_stats_inc_http2_send_flowctl_per_write((int)(value))
434
- void grpc_stats_inc_http2_send_flowctl_per_write(int value);
432
+ void grpc_stats_inc_http2_send_flowctl_per_write(int x);
435
433
  #define GRPC_STATS_INC_SERVER_CQS_CHECKED(value) \
436
434
  grpc_stats_inc_server_cqs_checked((int)(value))
437
- void grpc_stats_inc_server_cqs_checked(int value);
435
+ void grpc_stats_inc_server_cqs_checked(int x);
438
436
  #else
439
437
  #define GRPC_STATS_INC_CLIENT_CALLS_CREATED()
440
438
  #define GRPC_STATS_INC_SERVER_CALLS_CREATED()
@@ -450,8 +448,6 @@ void grpc_stats_inc_server_cqs_checked(int value);
450
448
  #define GRPC_STATS_INC_POLLSET_KICK_WAKEUP_FD()
451
449
  #define GRPC_STATS_INC_POLLSET_KICK_WAKEUP_CV()
452
450
  #define GRPC_STATS_INC_POLLSET_KICK_OWN_THREAD()
453
- #define GRPC_STATS_INC_SYSCALL_EPOLL_CTL()
454
- #define GRPC_STATS_INC_POLLSET_FD_CACHE_HITS()
455
451
  #define GRPC_STATS_INC_HISTOGRAM_SLOW_LOOKUPS()
456
452
  #define GRPC_STATS_INC_SYSCALL_WRITE()
457
453
  #define GRPC_STATS_INC_SYSCALL_READ()
@@ -484,6 +480,7 @@ void grpc_stats_inc_server_cqs_checked(int value);
484
480
  #define GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_STREAM_FLOW_CONTROL()
485
481
  #define GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_TRANSPORT_FLOW_CONTROL()
486
482
  #define GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_SEND_SETTINGS()
483
+ #define GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_SETTINGS_ACK()
487
484
  #define GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_BDP_ESTIMATOR_PING()
488
485
  #define GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_FLOW_CONTROL_UNSTALLED_BY_SETTING()
489
486
  #define GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_FLOW_CONTROL_UNSTALLED_BY_UPDATE()
@@ -50,6 +50,7 @@ class TlsTypeConstrainer {
50
50
 
51
51
  #include <pthread.h>
52
52
 
53
+ #include <algorithm>
53
54
  #include <array>
54
55
  #include <cstring>
55
56
 
@@ -153,6 +153,18 @@ class BitSet {
153
153
  return true;
154
154
  }
155
155
 
156
+ template <typename Int>
157
+ typename std::enable_if<std::is_unsigned<Int>::value &&
158
+ (sizeof(Int) * 8 >= kTotalBits),
159
+ Int>::type
160
+ ToInt() const {
161
+ Int result = 0;
162
+ for (size_t i = 0; i < kTotalBits; i++) {
163
+ if (is_set(i)) result |= (Int(1) << i);
164
+ }
165
+ return result;
166
+ }
167
+
156
168
  private:
157
169
  // Given a bit index, return which unit it's stored in.
158
170
  static constexpr size_t unit_for(size_t bit) { return bit / kUnitBits; }
@@ -31,6 +31,10 @@ class CppImplOf {
31
31
  return reinterpret_cast<CppType*>(c_type);
32
32
  }
33
33
 
34
+ static const CppType* FromC(const CType* c_type) {
35
+ return reinterpret_cast<const CppType*>(c_type);
36
+ }
37
+
34
38
  // Retrieve a c pointer (of the same ownership as this)
35
39
  CType* c_ptr() {
36
40
  return reinterpret_cast<CType*>(static_cast<CppType*>(this));
@@ -0,0 +1,73 @@
1
+ // Copyright 2021 gRPC authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #ifndef GRPC_CORE_LIB_GPRPP_MATCH_H
16
+ #define GRPC_CORE_LIB_GPRPP_MATCH_H
17
+
18
+ #include <grpc/support/port_platform.h>
19
+
20
+ #include "absl/types/variant.h"
21
+
22
+ #include "src/core/lib/gprpp/overload.h"
23
+
24
+ namespace grpc_core {
25
+
26
+ namespace detail {
27
+
28
+ template <typename... Cases>
29
+ struct MatchPointerExtractor {
30
+ OverloadType<Cases...> cases;
31
+ template <typename T>
32
+ auto operator()(T& value) -> decltype(cases(&value)) {
33
+ return cases(&value);
34
+ }
35
+ };
36
+
37
+ } // namespace detail
38
+
39
+ /// Match on a variant.
40
+ /// Given variant \a value, and a set of callables \a fs, call the appropriate
41
+ /// callable based on the type contained in \a value.
42
+ ///
43
+ /// Example (prints "hoorah"):
44
+ /// variant<int, string> v = 42;
45
+ /// Match(v,
46
+ /// [](int i) { puts("hoorah"); },
47
+ /// [](string s) { puts("boo"); });
48
+ template <typename... Fs, typename T0, typename... Ts>
49
+ auto Match(const absl::variant<T0, Ts...>& value, Fs... fs)
50
+ -> decltype(std::declval<OverloadType<Fs...>>()(std::declval<T0>())) {
51
+ return absl::visit(Overload(std::move(fs)...), value);
52
+ }
53
+
54
+ /// A version of Match that takes a mutable pointer to a variant and calls its
55
+ /// overload callables with a mutable pointer to the current variant value.
56
+ ///
57
+ /// Example:
58
+ /// variant<int, string> v = 42;
59
+ /// MatchMutable(&v,
60
+ /// [](int* i) { *i = 1; },
61
+ /// [](string* s) { *s = "foo"; });
62
+ /// // v now contains 1.
63
+ template <typename... Fs, typename T0, typename... Ts>
64
+ auto MatchMutable(absl::variant<T0, Ts...>* value, Fs... fs)
65
+ -> decltype(std::declval<OverloadType<Fs...>>()(std::declval<T0*>())) {
66
+ return absl::visit(detail::MatchPointerExtractor<Fs...>{OverloadType<Fs...>(
67
+ std::move(fs)...)},
68
+ *value);
69
+ }
70
+
71
+ } // namespace grpc_core
72
+
73
+ #endif // GRPC_CORE_LIB_GPRPP_MATCH_H
@@ -0,0 +1,59 @@
1
+ // Copyright 2021 gRPC authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #ifndef GRPC_CORE_LIB_GPRPP_OVERLOAD_H
16
+ #define GRPC_CORE_LIB_GPRPP_OVERLOAD_H
17
+
18
+ #include <grpc/support/port_platform.h>
19
+
20
+ #include <utility>
21
+
22
+ namespace grpc_core {
23
+
24
+ template <typename... Cases>
25
+ struct OverloadType;
26
+ // Compose one overload with N more -- use inheritance to leverage using and the
27
+ // empty base class optimization.
28
+ template <typename Case, typename... Cases>
29
+ struct OverloadType<Case, Cases...> : public Case,
30
+ public OverloadType<Cases...> {
31
+ explicit OverloadType(Case&& c, Cases&&... cases)
32
+ : Case(std::forward<Case>(c)),
33
+ OverloadType<Cases...>(std::forward<Cases>(cases)...) {}
34
+ using Case::operator();
35
+ using OverloadType<Cases...>::operator();
36
+ };
37
+ // Overload of a single case is just that case itself
38
+ template <typename Case>
39
+ struct OverloadType<Case> : public Case {
40
+ explicit OverloadType(Case&& c) : Case(std::forward<Case>(c)) {}
41
+ using Case::operator();
42
+ };
43
+
44
+ /// Compose callables into a single callable.
45
+ /// e.g. given [](int i) { puts("a"); } and [](double d) { puts("b"); },
46
+ /// return a callable object like:
47
+ /// struct {
48
+ /// void operator()(int i) { puts("a"); }
49
+ /// void operator()(double i) { puts("b"); }
50
+ /// };
51
+ /// Preserves all captures.
52
+ template <typename... Cases>
53
+ OverloadType<Cases...> Overload(Cases... cases) {
54
+ return OverloadType<Cases...>(std::move(cases)...);
55
+ }
56
+
57
+ } // namespace grpc_core
58
+
59
+ #endif // GRPC_CORE_LIB_GPRPP_OVERLOAD_H
@@ -281,6 +281,8 @@ template <typename Child, typename Impl = PolymorphicRefCount,
281
281
  UnrefBehavior UnrefBehaviorArg = kUnrefDelete>
282
282
  class RefCounted : public Impl {
283
283
  public:
284
+ using RefCountedChildType = Child;
285
+
284
286
  // Note: Depending on the Impl used, this dtor can be implicitly virtual.
285
287
  ~RefCounted() = default;
286
288