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
@@ -33,13 +33,14 @@ namespace grpc_core {
33
33
 
34
34
  class ClientAuthorityFilter final : public ChannelFilter {
35
35
  public:
36
- static absl::StatusOr<ClientAuthorityFilter> Create(
37
- const grpc_channel_args* args, ChannelFilter::Args);
36
+ static const grpc_channel_filter kFilter;
37
+
38
+ static absl::StatusOr<ClientAuthorityFilter> Create(ChannelArgs args,
39
+ ChannelFilter::Args);
38
40
 
39
41
  // Construct a promise for one call.
40
- ArenaPromise<TrailingMetadata> MakeCallPromise(
41
- ClientInitialMetadata initial_metadata,
42
- NextPromiseFactory next_promise_factory) override;
42
+ ArenaPromise<ServerMetadataHandle> MakeCallPromise(
43
+ CallArgs call_args, NextPromiseFactory next_promise_factory) override;
43
44
 
44
45
  private:
45
46
  explicit ClientAuthorityFilter(Slice default_authority)
@@ -66,6 +66,9 @@ void RegisterHttpFilters(CoreConfiguration::Builder* builder) {
66
66
  return true;
67
67
  });
68
68
  };
69
+ // TODO(ctiller): return this flag to true once the promise conversion is
70
+ // complete.
71
+ static constexpr bool kMinimalStackHasDecompression = false;
69
72
  optional(GRPC_CLIENT_SUBCHANNEL, false,
70
73
  GRPC_ARG_ENABLE_PER_MESSAGE_COMPRESSION,
71
74
  &grpc_message_compress_filter);
@@ -74,14 +77,14 @@ void RegisterHttpFilters(CoreConfiguration::Builder* builder) {
74
77
  &grpc_message_compress_filter);
75
78
  optional(GRPC_SERVER_CHANNEL, false, GRPC_ARG_ENABLE_PER_MESSAGE_COMPRESSION,
76
79
  &grpc_message_compress_filter);
77
- optional(GRPC_CLIENT_SUBCHANNEL, true,
80
+ optional(GRPC_CLIENT_SUBCHANNEL, kMinimalStackHasDecompression,
78
81
  GRPC_ARG_ENABLE_PER_MESSAGE_DECOMPRESSION, &MessageDecompressFilter);
79
- optional(GRPC_CLIENT_DIRECT_CHANNEL, true,
82
+ optional(GRPC_CLIENT_DIRECT_CHANNEL, kMinimalStackHasDecompression,
80
83
  GRPC_ARG_ENABLE_PER_MESSAGE_DECOMPRESSION, &MessageDecompressFilter);
81
- optional(GRPC_SERVER_CHANNEL, true, GRPC_ARG_ENABLE_PER_MESSAGE_DECOMPRESSION,
82
- &MessageDecompressFilter);
83
- required(GRPC_CLIENT_SUBCHANNEL, &grpc_http_client_filter);
84
- required(GRPC_CLIENT_DIRECT_CHANNEL, &grpc_http_client_filter);
84
+ optional(GRPC_SERVER_CHANNEL, kMinimalStackHasDecompression,
85
+ GRPC_ARG_ENABLE_PER_MESSAGE_DECOMPRESSION, &MessageDecompressFilter);
86
+ required(GRPC_CLIENT_SUBCHANNEL, &HttpClientFilter::kFilter);
87
+ required(GRPC_CLIENT_DIRECT_CHANNEL, &HttpClientFilter::kFilter);
85
88
  required(GRPC_SERVER_CHANNEL, &grpc_http_server_filter);
86
89
  }
87
90
  } // namespace grpc_core
@@ -37,7 +37,6 @@ static void hs_recv_initial_metadata_ready(void* user_data,
37
37
  grpc_error_handle err);
38
38
  static void hs_recv_trailing_metadata_ready(void* user_data,
39
39
  grpc_error_handle err);
40
- static void hs_recv_message_ready(void* user_data, grpc_error_handle err);
41
40
 
42
41
  namespace {
43
42
 
@@ -47,27 +46,15 @@ struct call_data {
47
46
  GRPC_CLOSURE_INIT(&recv_initial_metadata_ready,
48
47
  hs_recv_initial_metadata_ready, elem,
49
48
  grpc_schedule_on_exec_ctx);
50
- GRPC_CLOSURE_INIT(&recv_message_ready, hs_recv_message_ready, elem,
51
- grpc_schedule_on_exec_ctx);
52
49
  GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready,
53
50
  hs_recv_trailing_metadata_ready, elem,
54
51
  grpc_schedule_on_exec_ctx);
55
52
  }
56
53
 
57
- ~call_data() {
58
- GRPC_ERROR_UNREF(recv_initial_metadata_ready_error);
59
- if (have_read_stream) {
60
- read_stream->Orphan();
61
- }
62
- }
54
+ ~call_data() { GRPC_ERROR_UNREF(recv_initial_metadata_ready_error); }
63
55
 
64
56
  grpc_core::CallCombiner* call_combiner;
65
57
 
66
- // If we see the recv_message contents in the GET query string, we
67
- // store it here.
68
- grpc_core::ManualConstructor<grpc_core::SliceBufferByteStream> read_stream;
69
- bool have_read_stream = false;
70
-
71
58
  // State for intercepting recv_initial_metadata.
72
59
  grpc_closure recv_initial_metadata_ready;
73
60
  grpc_error_handle recv_initial_metadata_ready_error = GRPC_ERROR_NONE;
@@ -76,12 +63,6 @@ struct call_data {
76
63
  uint32_t* recv_initial_metadata_flags;
77
64
  bool seen_recv_initial_metadata_ready = false;
78
65
 
79
- // State for intercepting recv_message.
80
- grpc_closure* original_recv_message_ready;
81
- grpc_closure recv_message_ready;
82
- grpc_core::OrphanablePtr<grpc_core::ByteStream>* recv_message;
83
- bool seen_recv_message_ready = false;
84
-
85
66
  // State for intercepting recv_trailing_metadata
86
67
  grpc_closure recv_trailing_metadata_ready;
87
68
  grpc_closure* original_recv_trailing_metadata_ready;
@@ -115,7 +96,6 @@ static void hs_add_error(const char* error_name, grpc_error_handle* cumulative,
115
96
 
116
97
  static grpc_error_handle hs_filter_incoming_metadata(grpc_call_element* elem,
117
98
  grpc_metadata_batch* b) {
118
- call_data* calld = static_cast<call_data*>(elem->call_data);
119
99
  grpc_error_handle error = GRPC_ERROR_NONE;
120
100
  static const char* error_name = "Failed processing incoming headers";
121
101
 
@@ -123,23 +103,9 @@ static grpc_error_handle hs_filter_incoming_metadata(grpc_call_element* elem,
123
103
  if (method.has_value()) {
124
104
  switch (*method) {
125
105
  case grpc_core::HttpMethodMetadata::kPost:
126
- *calld->recv_initial_metadata_flags &=
127
- ~(GRPC_INITIAL_METADATA_CACHEABLE_REQUEST |
128
- GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST);
129
- break;
130
- case grpc_core::HttpMethodMetadata::kPut:
131
- *calld->recv_initial_metadata_flags &=
132
- ~GRPC_INITIAL_METADATA_CACHEABLE_REQUEST;
133
- *calld->recv_initial_metadata_flags |=
134
- GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST;
135
- break;
136
- case grpc_core::HttpMethodMetadata::kGet:
137
- *calld->recv_initial_metadata_flags |=
138
- GRPC_INITIAL_METADATA_CACHEABLE_REQUEST;
139
- *calld->recv_initial_metadata_flags &=
140
- ~GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST;
141
106
  break;
142
107
  case grpc_core::HttpMethodMetadata::kInvalid:
108
+ case grpc_core::HttpMethodMetadata::kGet:
143
109
  hs_add_error(error_name, &error,
144
110
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Bad method header"));
145
111
  break;
@@ -185,38 +151,6 @@ static grpc_error_handle hs_filter_incoming_metadata(grpc_call_element* elem,
185
151
  grpc_error_set_str(
186
152
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Missing header"),
187
153
  GRPC_ERROR_STR_KEY, ":path"));
188
- } else if (*calld->recv_initial_metadata_flags &
189
- GRPC_INITIAL_METADATA_CACHEABLE_REQUEST) {
190
- /* We have a cacheable request made with GET verb. The path contains the
191
- * query parameter which is base64 encoded request payload. */
192
- static const char kQuerySeparator = '?';
193
- /* offset of the character '?' */
194
- auto it =
195
- std::find(path_slice->begin(), path_slice->end(), kQuerySeparator);
196
- if (it != path_slice->end()) {
197
- const auto query_start = it - path_slice->begin() + 1;
198
- auto query_slice = path_slice->RefSubSlice(
199
- query_start, path_slice->size() - query_start);
200
-
201
- /* substitute path metadata with just the path (not query) */
202
- auto path_without_query = path_slice->TakeSubSlice(0, query_start - 1);
203
- *path_slice = std::move(path_without_query);
204
-
205
- /* decode payload from query and add to the slice buffer to be returned */
206
- const int k_url_safe = 1;
207
- grpc_slice_buffer read_slice_buffer;
208
- grpc_slice_buffer_init(&read_slice_buffer);
209
- grpc_slice_buffer_add(
210
- &read_slice_buffer,
211
- grpc_base64_decode_with_len(
212
- reinterpret_cast<const char*>(query_slice.begin()),
213
- query_slice.size(), k_url_safe));
214
- calld->read_stream.Init(&read_slice_buffer, 0);
215
- grpc_slice_buffer_destroy_internal(&read_slice_buffer);
216
- calld->have_read_stream = true;
217
- } else {
218
- gpr_log(GPR_ERROR, "GET request without QUERY");
219
- }
220
154
  }
221
155
 
222
156
  if (b->get_pointer(grpc_core::HttpAuthorityMetadata()) == nullptr) {
@@ -249,22 +183,6 @@ static void hs_recv_initial_metadata_ready(void* user_data,
249
183
  if (err == GRPC_ERROR_NONE) {
250
184
  err = hs_filter_incoming_metadata(elem, calld->recv_initial_metadata);
251
185
  calld->recv_initial_metadata_ready_error = GRPC_ERROR_REF(err);
252
- if (calld->seen_recv_message_ready) {
253
- // We've already seen the recv_message callback, but we previously
254
- // deferred it, so we need to return it here.
255
- // Replace the recv_message byte stream if needed.
256
- if (calld->have_read_stream) {
257
- calld->recv_message->reset(calld->read_stream.get());
258
- calld->have_read_stream = false;
259
- }
260
- // Re-enter call combiner for original_recv_message_ready, since the
261
- // surface code will release the call combiner for each callback it
262
- // receives.
263
- GRPC_CALL_COMBINER_START(
264
- calld->call_combiner, calld->original_recv_message_ready,
265
- GRPC_ERROR_REF(err),
266
- "resuming recv_message_ready from recv_initial_metadata_ready");
267
- }
268
186
  } else {
269
187
  (void)GRPC_ERROR_REF(err);
270
188
  }
@@ -279,31 +197,6 @@ static void hs_recv_initial_metadata_ready(void* user_data,
279
197
  calld->original_recv_initial_metadata_ready, err);
280
198
  }
281
199
 
282
- static void hs_recv_message_ready(void* user_data, grpc_error_handle err) {
283
- grpc_call_element* elem = static_cast<grpc_call_element*>(user_data);
284
- call_data* calld = static_cast<call_data*>(elem->call_data);
285
- calld->seen_recv_message_ready = true;
286
- if (calld->seen_recv_initial_metadata_ready) {
287
- // We've already seen the recv_initial_metadata callback, so
288
- // replace the recv_message byte stream if needed and invoke the
289
- // original recv_message callback immediately.
290
- if (calld->have_read_stream) {
291
- calld->recv_message->reset(calld->read_stream.get());
292
- calld->have_read_stream = false;
293
- }
294
- grpc_core::Closure::Run(DEBUG_LOCATION, calld->original_recv_message_ready,
295
- GRPC_ERROR_REF(err));
296
- } else {
297
- // We have not yet seen the recv_initial_metadata callback, so we
298
- // need to wait to see if this is a GET request.
299
- // Note that we release the call combiner here, so that other
300
- // callbacks can run.
301
- GRPC_CALL_COMBINER_STOP(
302
- calld->call_combiner,
303
- "pausing recv_message_ready until recv_initial_metadata_ready");
304
- }
305
- }
306
-
307
200
  static void hs_recv_trailing_metadata_ready(void* user_data,
308
201
  grpc_error_handle err) {
309
202
  grpc_call_element* elem = static_cast<grpc_call_element*>(user_data);
@@ -355,13 +248,6 @@ static grpc_error_handle hs_mutate_op(grpc_call_element* elem,
355
248
  &calld->recv_initial_metadata_ready;
356
249
  }
357
250
 
358
- if (op->recv_message) {
359
- calld->recv_message = op->payload->recv_message.recv_message;
360
- calld->original_recv_message_ready =
361
- op->payload->recv_message.recv_message_ready;
362
- op->payload->recv_message.recv_message_ready = &calld->recv_message_ready;
363
- }
364
-
365
251
  if (op->recv_trailing_metadata) {
366
252
  calld->original_recv_trailing_metadata_ready =
367
253
  op->payload->recv_trailing_metadata.recv_trailing_metadata_ready;
@@ -54,14 +54,8 @@ grpc_arg ServerConfigSelectorProvider::MakeChannelArg() const {
54
54
  const_cast<ServerConfigSelectorProvider*>(this), &kChannelArgVtable);
55
55
  }
56
56
 
57
- RefCountedPtr<ServerConfigSelectorProvider>
58
- ServerConfigSelectorProvider::GetFromChannelArgs(
59
- const grpc_channel_args& args) {
60
- ServerConfigSelectorProvider* config_selector_provider =
61
- grpc_channel_args_find_pointer<ServerConfigSelectorProvider>(
62
- &args, kServerConfigSelectorProviderChannelArgName);
63
- return config_selector_provider != nullptr ? config_selector_provider->Ref()
64
- : nullptr;
57
+ absl::string_view ServerConfigSelectorProvider::ChannelArgName() {
58
+ return kServerConfigSelectorProviderChannelArgName;
65
59
  }
66
60
 
67
61
  } // namespace grpc_core
@@ -61,9 +61,9 @@ class ServerConfigSelectorProvider
61
61
  std::unique_ptr<ServerConfigSelectorWatcher> watcher) = 0;
62
62
  virtual void CancelWatch() = 0;
63
63
 
64
+ static absl::string_view ChannelArgName();
65
+
64
66
  grpc_arg MakeChannelArg() const;
65
- static RefCountedPtr<ServerConfigSelectorProvider> GetFromChannelArgs(
66
- const grpc_channel_args& args);
67
67
  };
68
68
 
69
69
  } // namespace grpc_core
@@ -1,5 +1,3 @@
1
- //
2
- //
3
1
  // Copyright 2021 gRPC authors.
4
2
  //
5
3
  // Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,14 +11,16 @@
13
11
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
12
  // See the License for the specific language governing permissions and
15
13
  // limitations under the License.
16
- //
17
- //
18
14
 
19
15
  #include <grpc/support/port_platform.h>
20
16
 
21
17
  #include "src/core/ext/filters/server_config_selector/server_config_selector_filter.h"
22
18
 
23
19
  #include "src/core/ext/filters/server_config_selector/server_config_selector.h"
20
+ #include "src/core/lib/channel/promise_based_filter.h"
21
+ #include "src/core/lib/iomgr/error.h"
22
+ #include "src/core/lib/promise/promise.h"
23
+ #include "src/core/lib/resource_quota/arena.h"
24
24
  #include "src/core/lib/service_config/service_config_call_data.h"
25
25
  #include "src/core/lib/transport/error_utils.h"
26
26
 
@@ -28,244 +28,116 @@ namespace grpc_core {
28
28
 
29
29
  namespace {
30
30
 
31
- class ChannelData {
31
+ class ServerConfigSelectorFilter final : public ChannelFilter {
32
32
  public:
33
- static grpc_error_handle Init(grpc_channel_element* elem,
34
- grpc_channel_element_args* args);
35
- static void Destroy(grpc_channel_element* elem);
33
+ ~ServerConfigSelectorFilter() override;
34
+
35
+ ServerConfigSelectorFilter(const ServerConfigSelectorFilter&) = delete;
36
+ ServerConfigSelectorFilter& operator=(const ServerConfigSelectorFilter&) =
37
+ delete;
38
+ ServerConfigSelectorFilter(ServerConfigSelectorFilter&&) = default;
39
+ ServerConfigSelectorFilter& operator=(ServerConfigSelectorFilter&&) = default;
40
+
41
+ static absl::StatusOr<ServerConfigSelectorFilter> Create(ChannelArgs args,
42
+ ChannelFilter::Args);
43
+
44
+ ArenaPromise<ServerMetadataHandle> MakeCallPromise(
45
+ CallArgs call_args, NextPromiseFactory next_promise_factory) override;
36
46
 
37
47
  absl::StatusOr<RefCountedPtr<ServerConfigSelector>> config_selector() {
38
- MutexLock lock(&mu_);
39
- return config_selector_.value();
48
+ MutexLock lock(&state_->mu);
49
+ return state_->config_selector.value();
40
50
  }
41
51
 
42
52
  private:
53
+ struct State {
54
+ Mutex mu;
55
+ absl::optional<absl::StatusOr<RefCountedPtr<ServerConfigSelector>>>
56
+ config_selector ABSL_GUARDED_BY(mu);
57
+ };
43
58
  class ServerConfigSelectorWatcher
44
59
  : public ServerConfigSelectorProvider::ServerConfigSelectorWatcher {
45
60
  public:
46
- explicit ServerConfigSelectorWatcher(ChannelData* chand) : chand_(chand) {}
61
+ explicit ServerConfigSelectorWatcher(std::shared_ptr<State> state)
62
+ : state_(state) {}
47
63
  void OnServerConfigSelectorUpdate(
48
64
  absl::StatusOr<RefCountedPtr<ServerConfigSelector>> update) override {
49
- MutexLock lock(&chand_->mu_);
50
- chand_->config_selector_ = std::move(update);
65
+ MutexLock lock(&state_->mu);
66
+ state_->config_selector = std::move(update);
51
67
  }
52
68
 
53
69
  private:
54
- ChannelData* chand_;
70
+ std::shared_ptr<State> state_;
55
71
  };
56
72
 
57
- explicit ChannelData(RefCountedPtr<ServerConfigSelectorProvider>
58
- server_config_selector_provider);
59
- ~ChannelData();
73
+ explicit ServerConfigSelectorFilter(
74
+ RefCountedPtr<ServerConfigSelectorProvider>
75
+ server_config_selector_provider);
60
76
 
61
77
  RefCountedPtr<ServerConfigSelectorProvider> server_config_selector_provider_;
62
- Mutex mu_;
63
- absl::optional<absl::StatusOr<RefCountedPtr<ServerConfigSelector>>>
64
- config_selector_ ABSL_GUARDED_BY(mu_);
78
+ std::shared_ptr<State> state_;
65
79
  };
66
80
 
67
- class CallData {
68
- public:
69
- static grpc_error_handle Init(grpc_call_element* elem,
70
- const grpc_call_element_args* args);
71
- static void Destroy(grpc_call_element* elem,
72
- const grpc_call_final_info* /* final_info */,
73
- grpc_closure* /* then_schedule_closure */);
74
- static void StartTransportStreamOpBatch(grpc_call_element* elem,
75
- grpc_transport_stream_op_batch* op);
76
-
77
- private:
78
- CallData(grpc_call_element* elem, const grpc_call_element_args& args);
79
- ~CallData();
80
- static void RecvInitialMetadataReady(void* user_data,
81
- grpc_error_handle error);
82
- static void RecvTrailingMetadataReady(void* user_data,
83
- grpc_error_handle error);
84
- void MaybeResumeRecvTrailingMetadataReady();
85
-
86
- grpc_call_context_element* call_context_;
87
- CallCombiner* call_combiner_;
88
- ServiceConfigCallData service_config_call_data_;
89
- // Overall error for the call
90
- grpc_error_handle error_ = GRPC_ERROR_NONE;
91
- // State for keeping track of recv_initial_metadata
92
- grpc_metadata_batch* recv_initial_metadata_ = nullptr;
93
- grpc_closure* original_recv_initial_metadata_ready_ = nullptr;
94
- grpc_closure recv_initial_metadata_ready_;
95
- // State for keeping of track of recv_trailing_metadata
96
- grpc_closure* original_recv_trailing_metadata_ready_;
97
- grpc_closure recv_trailing_metadata_ready_;
98
- grpc_error_handle recv_trailing_metadata_ready_error_;
99
- bool seen_recv_trailing_metadata_ready_ = false;
100
- };
101
-
102
- // ChannelData
103
-
104
- grpc_error_handle ChannelData::Init(grpc_channel_element* elem,
105
- grpc_channel_element_args* args) {
106
- GPR_ASSERT(elem->filter == &kServerConfigSelectorFilter);
107
- RefCountedPtr<ServerConfigSelectorProvider> server_config_selector_provider =
108
- ServerConfigSelectorProvider::GetFromChannelArgs(*args->channel_args);
81
+ absl::StatusOr<ServerConfigSelectorFilter> ServerConfigSelectorFilter::Create(
82
+ ChannelArgs args, ChannelFilter::Args) {
83
+ ServerConfigSelectorProvider* server_config_selector_provider =
84
+ args.GetObject<ServerConfigSelectorProvider>();
109
85
  if (server_config_selector_provider == nullptr) {
110
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
111
- "No ServerConfigSelectorProvider object found");
86
+ return absl::UnknownError("No ServerConfigSelectorProvider object found");
112
87
  }
113
- new (elem->channel_data)
114
- ChannelData(std::move(server_config_selector_provider));
115
- return GRPC_ERROR_NONE;
88
+ return ServerConfigSelectorFilter(server_config_selector_provider->Ref());
116
89
  }
117
90
 
118
- void ChannelData::Destroy(grpc_channel_element* elem) {
119
- auto* chand = static_cast<ChannelData*>(elem->channel_data);
120
- chand->~ChannelData();
121
- }
122
-
123
- ChannelData::ChannelData(
91
+ ServerConfigSelectorFilter::ServerConfigSelectorFilter(
124
92
  RefCountedPtr<ServerConfigSelectorProvider> server_config_selector_provider)
125
93
  : server_config_selector_provider_(
126
- std::move(server_config_selector_provider)) {
94
+ std::move(server_config_selector_provider)),
95
+ state_(std::make_shared<State>()) {
127
96
  GPR_ASSERT(server_config_selector_provider_ != nullptr);
128
97
  auto server_config_selector_watcher =
129
- absl::make_unique<ServerConfigSelectorWatcher>(this);
98
+ absl::make_unique<ServerConfigSelectorWatcher>(state_);
130
99
  auto config_selector = server_config_selector_provider_->Watch(
131
100
  std::move(server_config_selector_watcher));
132
- MutexLock lock(&mu_);
101
+ MutexLock lock(&state_->mu);
133
102
  // It's possible for the watcher to have already updated config_selector_
134
- if (!config_selector_.has_value()) {
135
- config_selector_ = std::move(config_selector);
103
+ if (!state_->config_selector.has_value()) {
104
+ state_->config_selector = std::move(config_selector);
136
105
  }
137
106
  }
138
107
 
139
- ChannelData::~ChannelData() { server_config_selector_provider_->CancelWatch(); }
140
-
141
- // CallData
142
-
143
- grpc_error_handle CallData::Init(grpc_call_element* elem,
144
- const grpc_call_element_args* args) {
145
- new (elem->call_data) CallData(elem, *args);
146
- return GRPC_ERROR_NONE;
147
- }
148
-
149
- void CallData::Destroy(grpc_call_element* elem,
150
- const grpc_call_final_info* /*final_info*/,
151
- grpc_closure* /*then_schedule_closure*/) {
152
- auto* calld = static_cast<CallData*>(elem->call_data);
153
- calld->~CallData();
154
- }
155
-
156
- void CallData::StartTransportStreamOpBatch(grpc_call_element* elem,
157
- grpc_transport_stream_op_batch* op) {
158
- CallData* calld = static_cast<CallData*>(elem->call_data);
159
- if (op->recv_initial_metadata) {
160
- calld->recv_initial_metadata_ =
161
- op->payload->recv_initial_metadata.recv_initial_metadata;
162
- calld->original_recv_initial_metadata_ready_ =
163
- op->payload->recv_initial_metadata.recv_initial_metadata_ready;
164
- op->payload->recv_initial_metadata.recv_initial_metadata_ready =
165
- &calld->recv_initial_metadata_ready_;
166
- }
167
- if (op->recv_trailing_metadata) {
168
- // We might generate errors on receiving initial metadata which we need to
169
- // bubble up through recv_trailing_metadata_ready
170
- calld->original_recv_trailing_metadata_ready_ =
171
- op->payload->recv_trailing_metadata.recv_trailing_metadata_ready;
172
- op->payload->recv_trailing_metadata.recv_trailing_metadata_ready =
173
- &calld->recv_trailing_metadata_ready_;
174
- }
175
- // Chain to the next filter.
176
- grpc_call_next_op(elem, op);
177
- }
178
-
179
- CallData::CallData(grpc_call_element* elem, const grpc_call_element_args& args)
180
- : call_context_(args.context), call_combiner_(args.call_combiner) {
181
- GRPC_CLOSURE_INIT(&recv_initial_metadata_ready_, RecvInitialMetadataReady,
182
- elem, grpc_schedule_on_exec_ctx);
183
- GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready_, RecvTrailingMetadataReady,
184
- elem, grpc_schedule_on_exec_ctx);
185
- }
186
-
187
- CallData::~CallData() {
188
- // Remove the entry from call context, just in case anyone above us
189
- // tries to look at it during call stack destruction.
190
- call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value = nullptr;
191
- GRPC_ERROR_UNREF(error_);
192
- }
193
-
194
- void CallData::RecvInitialMetadataReady(void* user_data,
195
- grpc_error_handle error) {
196
- grpc_call_element* elem = static_cast<grpc_call_element*>(user_data);
197
- CallData* calld = static_cast<CallData*>(elem->call_data);
198
- ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
199
- if (error == GRPC_ERROR_NONE) {
200
- auto config_selector = chand->config_selector();
201
- if (config_selector.ok()) {
202
- auto call_config =
203
- config_selector.value()->GetCallConfig(calld->recv_initial_metadata_);
204
- if (call_config.error != GRPC_ERROR_NONE) {
205
- calld->error_ = call_config.error;
206
- error = call_config.error; // Does not take a ref
207
- } else {
208
- calld->service_config_call_data_ =
209
- ServiceConfigCallData(std::move(call_config.service_config),
210
- call_config.method_configs, {});
211
- calld->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value =
212
- &calld->service_config_call_data_;
213
- }
214
- } else {
215
- calld->error_ = absl_status_to_grpc_error(config_selector.status());
216
- error = calld->error_;
217
- }
108
+ ServerConfigSelectorFilter::~ServerConfigSelectorFilter() {
109
+ if (server_config_selector_provider_ != nullptr) {
110
+ server_config_selector_provider_->CancelWatch();
218
111
  }
219
- calld->MaybeResumeRecvTrailingMetadataReady();
220
- grpc_closure* closure = calld->original_recv_initial_metadata_ready_;
221
- calld->original_recv_initial_metadata_ready_ = nullptr;
222
- Closure::Run(DEBUG_LOCATION, closure, GRPC_ERROR_REF(error));
223
112
  }
224
113
 
225
- void CallData::RecvTrailingMetadataReady(void* user_data,
226
- grpc_error_handle error) {
227
- grpc_call_element* elem = static_cast<grpc_call_element*>(user_data);
228
- CallData* calld = static_cast<CallData*>(elem->call_data);
229
- if (calld->original_recv_initial_metadata_ready_ != nullptr) {
230
- calld->seen_recv_trailing_metadata_ready_ = true;
231
- calld->recv_trailing_metadata_ready_error_ = GRPC_ERROR_REF(error);
232
- GRPC_CALL_COMBINER_STOP(calld->call_combiner_,
233
- "Deferring RecvTrailingMetadataReady until after "
234
- "RecvInitialMetadataReady");
235
- return;
236
- }
237
- error = grpc_error_add_child(GRPC_ERROR_REF(error), calld->error_);
238
- calld->error_ = GRPC_ERROR_NONE;
239
- grpc_closure* closure = calld->original_recv_trailing_metadata_ready_;
240
- calld->original_recv_trailing_metadata_ready_ = nullptr;
241
- Closure::Run(DEBUG_LOCATION, closure, error);
242
- }
243
-
244
- void CallData::MaybeResumeRecvTrailingMetadataReady() {
245
- if (seen_recv_trailing_metadata_ready_) {
246
- seen_recv_trailing_metadata_ready_ = false;
247
- grpc_error_handle error = recv_trailing_metadata_ready_error_;
248
- recv_trailing_metadata_ready_error_ = GRPC_ERROR_NONE;
249
- GRPC_CALL_COMBINER_START(call_combiner_, &recv_trailing_metadata_ready_,
250
- error, "Continuing RecvTrailingMetadataReady");
114
+ ArenaPromise<ServerMetadataHandle> ServerConfigSelectorFilter::MakeCallPromise(
115
+ CallArgs call_args, NextPromiseFactory next_promise_factory) {
116
+ auto sel = config_selector();
117
+ if (!sel.ok()) return Immediate(ServerMetadataHandle(sel.status()));
118
+ auto call_config =
119
+ sel.value()->GetCallConfig(call_args.client_initial_metadata.get());
120
+ if (call_config.error != GRPC_ERROR_NONE) {
121
+ auto r = Immediate(ServerMetadataHandle(
122
+ absl::UnavailableError(grpc_error_std_string(call_config.error))));
123
+ GRPC_ERROR_UNREF(call_config.error);
124
+ return std::move(r);
251
125
  }
126
+ auto& ctx = GetContext<
127
+ grpc_call_context_element>()[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA];
128
+ ctx.value = GetContext<Arena>()->New<ServiceConfigCallData>(
129
+ std::move(call_config.service_config), call_config.method_configs,
130
+ ServiceConfigCallData::CallAttributes{});
131
+ ctx.destroy = [](void* p) {
132
+ static_cast<ServiceConfigCallData*>(p)->~ServiceConfigCallData();
133
+ };
134
+ return next_promise_factory(std::move(call_args));
252
135
  }
253
136
 
254
137
  } // namespace
255
138
 
256
- const grpc_channel_filter kServerConfigSelectorFilter = {
257
- CallData::StartTransportStreamOpBatch,
258
- nullptr,
259
- grpc_channel_next_op,
260
- sizeof(CallData),
261
- CallData::Init,
262
- grpc_call_stack_ignore_set_pollset_or_pollset_set,
263
- CallData::Destroy,
264
- sizeof(ChannelData),
265
- ChannelData::Init,
266
- ChannelData::Destroy,
267
- grpc_channel_next_get_info,
268
- "server_config_selector_filter",
269
- };
139
+ const grpc_channel_filter kServerConfigSelectorFilter =
140
+ MakePromiseBasedFilter<ServerConfigSelectorFilter, FilterEndpoint::kServer>(
141
+ "server_config_selector_filter");
270
142
 
271
143
  } // namespace grpc_core
@@ -41,6 +41,7 @@
41
41
  #include "src/core/lib/resolver/resolver_registry.h"
42
42
  #include "src/core/lib/resource_quota/api.h"
43
43
  #include "src/core/lib/security/credentials/credentials.h"
44
+ #include "src/core/lib/security/credentials/insecure/insecure_credentials.h"
44
45
  #include "src/core/lib/security/security_connector/security_connector.h"
45
46
  #include "src/core/lib/slice/slice_internal.h"
46
47
  #include "src/core/lib/surface/api_trace.h"
@@ -438,7 +439,7 @@ grpc_channel* grpc_channel_create_from_fd(const char* target, int fd,
438
439
  (target, fd, creds, args));
439
440
  // For now, we only support insecure channel credentials.
440
441
  if (creds == nullptr ||
441
- strcmp(creds->type(), GRPC_CREDENTIALS_TYPE_INSECURE) != 0) {
442
+ creds->type() != grpc_core::InsecureServerCredentials::Type()) {
442
443
  return grpc_lame_client_channel_create(
443
444
  target, GRPC_STATUS_INTERNAL,
444
445
  "Failed to create client channel due to invalid creds");
@@ -55,6 +55,7 @@
55
55
  #include "src/core/lib/resource_quota/memory_quota.h"
56
56
  #include "src/core/lib/security/context/security_context.h"
57
57
  #include "src/core/lib/security/credentials/credentials.h"
58
+ #include "src/core/lib/security/credentials/insecure/insecure_credentials.h"
58
59
  #include "src/core/lib/slice/slice_internal.h"
59
60
  #include "src/core/lib/surface/api_trace.h"
60
61
  #include "src/core/lib/surface/server.h"
@@ -940,9 +941,9 @@ grpc_error_handle Chttp2ServerAddPort(Server* server, const char* addr,
940
941
  }
941
942
  }
942
943
  if (error_list.size() == resolved_or->size()) {
943
- std::string msg =
944
- absl::StrFormat("No address added out of total %" PRIuPTR " resolved",
945
- resolved_or->size());
944
+ std::string msg = absl::StrFormat(
945
+ "No address added out of total %" PRIuPTR " resolved for '%s'",
946
+ resolved_or->size(), addr);
946
947
  return GRPC_ERROR_CREATE_REFERENCING_FROM_COPIED_STRING(
947
948
  msg.c_str(), error_list.data(), error_list.size());
948
949
  } else if (!error_list.empty()) {
@@ -1059,7 +1060,7 @@ void grpc_server_add_channel_from_fd(grpc_server* server, int fd,
1059
1060
  grpc_server_credentials* creds) {
1060
1061
  // For now, we only support insecure server credentials
1061
1062
  if (creds == nullptr ||
1062
- strcmp(creds->type(), GRPC_CREDENTIALS_TYPE_INSECURE) != 0) {
1063
+ creds->type() != grpc_core::InsecureServerCredentials::Type()) {
1063
1064
  gpr_log(GPR_ERROR, "Failed to create channel due to invalid creds");
1064
1065
  return;
1065
1066
  }