grpc 1.45.0 → 1.46.2

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 (513) 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_certificate_provider.cc +2 -0
  343. data/src/core/ext/xds/xds_certificate_provider.h +8 -0
  344. data/src/core/ext/xds/xds_client.cc +83 -93
  345. data/src/core/ext/xds/xds_client.h +11 -4
  346. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +142 -0
  347. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +79 -0
  348. data/src/core/ext/xds/xds_common_types.cc +9 -9
  349. data/src/core/ext/xds/xds_common_types.h +3 -3
  350. data/src/core/ext/xds/xds_endpoint.cc +12 -5
  351. data/src/core/ext/xds/xds_http_fault_filter.cc +1 -1
  352. data/src/core/ext/xds/xds_listener.cc +1 -1
  353. data/src/core/ext/xds/xds_route_config.cc +162 -25
  354. data/src/core/ext/xds/xds_route_config.h +13 -10
  355. data/src/core/ext/xds/xds_server_config_fetcher.cc +17 -22
  356. data/src/core/lib/avl/avl.h +68 -5
  357. data/src/core/lib/channel/call_tracer.h +4 -1
  358. data/src/core/lib/channel/channel_args.cc +138 -59
  359. data/src/core/lib/channel/channel_args.h +210 -9
  360. data/src/core/lib/channel/channel_args_preconditioning.cc +3 -9
  361. data/src/core/lib/channel/channel_args_preconditioning.h +1 -2
  362. data/src/core/lib/channel/channel_stack.h +2 -5
  363. data/src/core/lib/channel/channel_stack_builder.cc +0 -65
  364. data/src/core/lib/channel/channel_stack_builder.h +27 -6
  365. data/src/core/lib/channel/channel_stack_builder_impl.cc +102 -0
  366. data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
  367. data/src/core/lib/channel/connected_channel.h +1 -0
  368. data/src/core/lib/channel/promise_based_filter.cc +495 -162
  369. data/src/core/lib/channel/promise_based_filter.h +55 -41
  370. data/src/core/lib/compression/compression_internal.cc +1 -7
  371. data/src/core/lib/debug/stats_data.cc +2 -6
  372. data/src/core/lib/debug/stats_data.h +18 -21
  373. data/src/core/lib/gpr/tls.h +1 -0
  374. data/src/core/lib/gprpp/bitset.h +12 -0
  375. data/src/core/lib/gprpp/cpp_impl_of.h +4 -0
  376. data/src/core/lib/gprpp/match.h +73 -0
  377. data/src/core/lib/gprpp/overload.h +59 -0
  378. data/src/core/lib/gprpp/ref_counted.h +2 -0
  379. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  380. data/src/core/lib/gprpp/status_helper.cc +18 -2
  381. data/src/core/lib/gprpp/time.cc +12 -0
  382. data/src/core/lib/gprpp/time.h +1 -1
  383. data/src/core/lib/http/format_request.cc +1 -2
  384. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  385. data/src/core/lib/http/parser.cc +80 -9
  386. data/src/core/lib/http/parser.h +14 -1
  387. data/src/core/lib/iomgr/ev_posix.cc +6 -7
  388. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  389. data/src/core/lib/iomgr/port.h +0 -2
  390. data/src/core/lib/iomgr/tcp_client_posix.cc +2 -2
  391. data/src/core/lib/iomgr/tcp_posix.cc +93 -35
  392. data/src/core/lib/iomgr/tcp_server_posix.cc +26 -17
  393. data/src/core/lib/json/json_util.h +3 -3
  394. data/src/core/lib/promise/call_push_pull.h +144 -0
  395. data/src/core/lib/promise/detail/status.h +2 -1
  396. data/src/core/lib/promise/intra_activity_waiter.h +49 -0
  397. data/src/core/lib/promise/latch.h +104 -0
  398. data/src/core/lib/resource_quota/api.cc +5 -30
  399. data/src/core/lib/resource_quota/api.h +1 -1
  400. data/src/core/lib/resource_quota/resource_quota.h +8 -0
  401. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  402. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +9 -12
  403. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +5 -6
  404. data/src/core/lib/security/context/security_context.h +8 -1
  405. data/src/core/lib/security/credentials/alts/alts_credentials.cc +6 -5
  406. data/src/core/lib/security/credentials/alts/alts_credentials.h +4 -0
  407. data/src/core/lib/security/credentials/call_creds_util.cc +3 -3
  408. data/src/core/lib/security/credentials/call_creds_util.h +2 -2
  409. data/src/core/lib/security/credentials/composite/composite_credentials.cc +15 -10
  410. data/src/core/lib/security/credentials/composite/composite_credentials.h +9 -8
  411. data/src/core/lib/security/credentials/credentials.h +16 -33
  412. data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -12
  413. data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -5
  414. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +4 -0
  415. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +3 -3
  416. data/src/core/lib/security/credentials/iam/iam_credentials.cc +5 -4
  417. data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -2
  418. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +22 -29
  419. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +57 -0
  420. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -3
  421. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +6 -2
  422. data/src/core/lib/security/credentials/local/local_credentials.cc +6 -6
  423. data/src/core/lib/security/credentials/local/local_credentials.h +4 -0
  424. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +17 -9
  425. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +14 -6
  426. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -6
  427. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +8 -6
  428. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +6 -4
  429. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +8 -0
  430. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +49 -0
  431. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +8 -0
  432. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +42 -3
  433. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +66 -95
  434. data/src/core/lib/security/credentials/tls/tls_credentials.cc +9 -6
  435. data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -5
  436. data/src/core/lib/security/credentials/xds/xds_credentials.cc +48 -50
  437. data/src/core/lib/security/credentials/xds/xds_credentials.h +31 -5
  438. data/src/core/lib/security/security_connector/local/local_security_connector.cc +2 -2
  439. data/src/core/lib/security/security_connector/security_connector.h +9 -0
  440. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -2
  441. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -2
  442. data/src/core/lib/security/transport/auth_filters.h +7 -7
  443. data/src/core/lib/security/transport/client_auth_filter.cc +28 -20
  444. data/src/core/lib/security/transport/secure_endpoint.cc +198 -129
  445. data/src/core/lib/security/transport/secure_endpoint.h +1 -1
  446. data/src/core/lib/security/transport/security_handshaker.cc +6 -4
  447. data/src/core/lib/surface/call.cc +1023 -903
  448. data/src/core/lib/surface/call.h +0 -14
  449. data/src/core/lib/surface/channel.cc +4 -3
  450. data/src/core/lib/surface/channel_init.cc +2 -3
  451. data/src/core/lib/surface/channel_init.h +2 -6
  452. data/src/core/lib/surface/init.cc +1 -1
  453. data/src/core/lib/surface/server.cc +3 -14
  454. data/src/core/lib/surface/server.h +1 -2
  455. data/src/core/lib/surface/version.cc +2 -2
  456. data/src/core/lib/transport/byte_stream.cc +2 -0
  457. data/src/core/lib/transport/metadata_batch.h +12 -8
  458. data/src/core/lib/transport/transport.h +20 -5
  459. data/src/core/lib/transport/transport_impl.h +4 -3
  460. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -4
  461. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -2
  462. data/src/core/tsi/ssl_transport_security.cc +75 -38
  463. data/src/core/tsi/ssl_transport_security.h +8 -2
  464. data/src/core/tsi/transport_security_interface.h +2 -0
  465. data/src/ruby/ext/grpc/extconf.rb +1 -1
  466. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  467. data/src/ruby/lib/grpc/grpc.rb +1 -1
  468. data/src/ruby/lib/grpc/version.rb +1 -1
  469. data/src/ruby/pb/generate_proto_ruby.sh +1 -0
  470. data/src/ruby/pb/test/client.rb +769 -0
  471. data/src/ruby/pb/test/server.rb +252 -0
  472. data/src/ruby/pb/test/xds_client.rb +415 -0
  473. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  474. data/third_party/upb/upb/decode.c +32 -16
  475. data/third_party/upb/upb/def.c +118 -55
  476. data/third_party/upb/upb/def.h +12 -3
  477. data/third_party/upb/upb/encode.c +14 -8
  478. data/third_party/upb/upb/json_encode.c +776 -0
  479. data/third_party/upb/upb/json_encode.h +62 -0
  480. data/third_party/upb/upb/msg.c +5 -7
  481. data/third_party/upb/upb/msg.h +1 -2
  482. data/third_party/upb/upb/msg_internal.h +49 -36
  483. data/third_party/upb/upb/port_def.inc +8 -0
  484. data/third_party/upb/upb/port_undef.inc +1 -0
  485. data/third_party/upb/upb/table.c +10 -6
  486. data/third_party/upb/upb/table_internal.h +2 -0
  487. data/third_party/upb/upb/upb.h +41 -11
  488. data/third_party/zlib/crc32.c +966 -292
  489. data/third_party/zlib/crc32.h +9441 -436
  490. data/third_party/zlib/deflate.c +78 -30
  491. data/third_party/zlib/deflate.h +12 -15
  492. data/third_party/zlib/gzguts.h +3 -2
  493. data/third_party/zlib/gzlib.c +5 -3
  494. data/third_party/zlib/gzread.c +5 -7
  495. data/third_party/zlib/gzwrite.c +25 -13
  496. data/third_party/zlib/infback.c +2 -1
  497. data/third_party/zlib/inffast.c +14 -14
  498. data/third_party/zlib/inflate.c +39 -8
  499. data/third_party/zlib/inflate.h +3 -2
  500. data/third_party/zlib/inftrees.c +3 -3
  501. data/third_party/zlib/trees.c +27 -48
  502. data/third_party/zlib/zlib.h +123 -100
  503. data/third_party/zlib/zutil.c +2 -2
  504. data/third_party/zlib/zutil.h +12 -9
  505. metadata +66 -45
  506. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -201
  507. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -566
  508. data/src/core/ext/filters/max_age/max_age_filter.h +0 -26
  509. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1657
  510. data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
  511. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
  512. data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
  513. data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
@@ -22,6 +22,8 @@
22
22
  #include <algorithm>
23
23
  #include <memory>
24
24
 
25
+ #include "absl/container/inlined_vector.h"
26
+
25
27
  namespace grpc_core {
26
28
 
27
29
  template <class K, class V = void>
@@ -32,8 +34,12 @@ class AVL {
32
34
  AVL Add(K key, V value) const {
33
35
  return AVL(AddKey(root_, std::move(key), std::move(value)));
34
36
  }
35
- AVL Remove(const K& key) const { return AVL(RemoveKey(root_, key)); }
36
- const V* Lookup(const K& key) const {
37
+ template <typename SomethingLikeK>
38
+ AVL Remove(const SomethingLikeK& key) const {
39
+ return AVL(RemoveKey(root_, key));
40
+ }
41
+ template <typename SomethingLikeK>
42
+ const V* Lookup(const SomethingLikeK& key) const {
37
43
  NodePtr n = Get(root_, key);
38
44
  return n ? &n->kv.second : nullptr;
39
45
  }
@@ -50,7 +56,36 @@ class AVL {
50
56
  ForEachImpl(root_.get(), std::forward<F>(f));
51
57
  }
52
58
 
53
- bool SameIdentity(AVL avl) const { return root_ == avl.root_; }
59
+ bool SameIdentity(const AVL& avl) const { return root_ == avl.root_; }
60
+
61
+ bool operator==(const AVL& other) const {
62
+ Iterator a(root_);
63
+ Iterator b(other.root_);
64
+ for (;;) {
65
+ Node* p = a.current();
66
+ Node* q = b.current();
67
+ if (p == nullptr) return q == nullptr;
68
+ if (q == nullptr) return false;
69
+ if (p->kv != q->kv) return false;
70
+ a.MoveNext();
71
+ b.MoveNext();
72
+ }
73
+ }
74
+
75
+ bool operator<(const AVL& other) const {
76
+ Iterator a(root_);
77
+ Iterator b(other.root_);
78
+ for (;;) {
79
+ Node* p = a.current();
80
+ Node* q = b.current();
81
+ if (p == nullptr) return q != nullptr;
82
+ if (q == nullptr) return false;
83
+ if (p->kv < q->kv) return true;
84
+ if (p->kv != q->kv) return false;
85
+ a.MoveNext();
86
+ b.MoveNext();
87
+ }
88
+ }
54
89
 
55
90
  private:
56
91
  struct Node;
@@ -68,6 +103,32 @@ class AVL {
68
103
  };
69
104
  NodePtr root_;
70
105
 
106
+ class Iterator {
107
+ public:
108
+ explicit Iterator(const NodePtr& root) {
109
+ auto* n = root.get();
110
+ while (n != nullptr) {
111
+ stack_.push_back(n);
112
+ n = n->left.get();
113
+ }
114
+ }
115
+ Node* current() const { return stack_.empty() ? nullptr : stack_.back(); }
116
+ void MoveNext() {
117
+ auto* n = stack_.back();
118
+ stack_.pop_back();
119
+ if (n->right != nullptr) {
120
+ n = n->right.get();
121
+ while (n != nullptr) {
122
+ stack_.push_back(n);
123
+ n = n->left.get();
124
+ }
125
+ }
126
+ }
127
+
128
+ private:
129
+ absl::InlinedVector<Node*, 8> stack_;
130
+ };
131
+
71
132
  explicit AVL(NodePtr root) : root_(std::move(root)) {}
72
133
 
73
134
  template <class F>
@@ -86,7 +147,8 @@ class AVL {
86
147
  1 + std::max(Height(left), Height(right)));
87
148
  }
88
149
 
89
- static NodePtr Get(const NodePtr& node, const K& key) {
150
+ template <typename SomethingLikeK>
151
+ static NodePtr Get(const NodePtr& node, const SomethingLikeK& key) {
90
152
  if (node == nullptr) {
91
153
  return nullptr;
92
154
  }
@@ -198,7 +260,8 @@ class AVL {
198
260
  return node;
199
261
  }
200
262
 
201
- static NodePtr RemoveKey(const NodePtr& node, const K& key) {
263
+ template <typename SomethingLikeK>
264
+ static NodePtr RemoveKey(const NodePtr& node, const SomethingLikeK& key) {
202
265
  if (node == nullptr) {
203
266
  return nullptr;
204
267
  }
@@ -59,9 +59,12 @@ class CallTracer {
59
59
  virtual void RecordReceivedInitialMetadata(
60
60
  grpc_metadata_batch* recv_initial_metadata, uint32_t flags) = 0;
61
61
  virtual void RecordReceivedMessage(const ByteStream& recv_message) = 0;
62
+ // If the call was cancelled before the recv_trailing_metadata op
63
+ // was started, recv_trailing_metadata and transport_stream_stats
64
+ // will be null.
62
65
  virtual void RecordReceivedTrailingMetadata(
63
66
  absl::Status status, grpc_metadata_batch* recv_trailing_metadata,
64
- const grpc_transport_stream_stats& transport_stream_stats) = 0;
67
+ const grpc_transport_stream_stats* transport_stream_stats) = 0;
65
68
  virtual void RecordCancel(grpc_error_handle cancel_error) = 0;
66
69
  // Should be the last API call to the object. Once invoked, the tracer
67
70
  // library is free to destroy the object.
@@ -37,6 +37,130 @@
37
37
 
38
38
  #include "src/core/lib/gpr/string.h"
39
39
  #include "src/core/lib/gpr/useful.h"
40
+ #include "src/core/lib/gprpp/match.h"
41
+
42
+ namespace {
43
+
44
+ int PointerCompare(void* a_ptr, const grpc_arg_pointer_vtable* a_vtable,
45
+ void* b_ptr, const grpc_arg_pointer_vtable* b_vtable) {
46
+ int c = grpc_core::QsortCompare(a_ptr, b_ptr);
47
+ if (c == 0) return 0;
48
+ c = grpc_core::QsortCompare(a_vtable, b_vtable);
49
+ if (c != 0) return c;
50
+ return a_vtable->cmp(a_ptr, b_ptr);
51
+ }
52
+
53
+ } // namespace
54
+
55
+ namespace grpc_core {
56
+
57
+ bool ChannelArgs::Pointer::operator==(const Pointer& rhs) const {
58
+ return PointerCompare(p_, vtable_, rhs.p_, rhs.vtable_) == 0;
59
+ }
60
+
61
+ bool ChannelArgs::Pointer::operator<(const Pointer& rhs) const {
62
+ return PointerCompare(p_, vtable_, rhs.p_, rhs.vtable_) < 0;
63
+ }
64
+
65
+ ChannelArgs::ChannelArgs() = default;
66
+
67
+ ChannelArgs ChannelArgs::Set(grpc_arg arg) const {
68
+ switch (arg.type) {
69
+ case GRPC_ARG_INTEGER:
70
+ return Set(arg.key, arg.value.integer);
71
+ case GRPC_ARG_STRING:
72
+ if (arg.value.string != nullptr) return Set(arg.key, arg.value.string);
73
+ return Set(arg.key, "");
74
+ case GRPC_ARG_POINTER:
75
+ return Set(arg.key,
76
+ Pointer(arg.value.pointer.vtable->copy(arg.value.pointer.p),
77
+ arg.value.pointer.vtable));
78
+ }
79
+ GPR_UNREACHABLE_CODE(return ChannelArgs());
80
+ }
81
+
82
+ ChannelArgs ChannelArgs::FromC(const grpc_channel_args* args) {
83
+ ChannelArgs result;
84
+ if (args != nullptr) {
85
+ for (size_t i = 0; i < args->num_args; i++) {
86
+ result = result.Set(args->args[i]);
87
+ }
88
+ }
89
+ return result;
90
+ }
91
+
92
+ const grpc_channel_args* ChannelArgs::ToC() const {
93
+ std::vector<grpc_arg> c_args;
94
+ args_.ForEach([&c_args](const std::string& key, const Value& value) {
95
+ char* name = const_cast<char*>(key.c_str());
96
+ c_args.push_back(Match(
97
+ value,
98
+ [name](int i) { return grpc_channel_arg_integer_create(name, i); },
99
+ [name](const std::string& s) {
100
+ return grpc_channel_arg_string_create(name,
101
+ const_cast<char*>(s.c_str()));
102
+ },
103
+ [name](const Pointer& p) {
104
+ return grpc_channel_arg_pointer_create(name, p.c_pointer(),
105
+ p.c_vtable());
106
+ }));
107
+ });
108
+ return grpc_channel_args_copy_and_add(nullptr, c_args.data(), c_args.size());
109
+ }
110
+
111
+ ChannelArgs ChannelArgs::Set(absl::string_view key, Value value) const {
112
+ return ChannelArgs(args_.Add(std::string(key), std::move(value)));
113
+ }
114
+
115
+ ChannelArgs ChannelArgs::Set(absl::string_view key,
116
+ absl::string_view value) const {
117
+ return Set(key, std::string(value));
118
+ }
119
+
120
+ ChannelArgs ChannelArgs::Set(absl::string_view key, const char* value) const {
121
+ return Set(key, std::string(value));
122
+ }
123
+
124
+ ChannelArgs ChannelArgs::Set(absl::string_view key, std::string value) const {
125
+ return Set(key, Value(std::move(value)));
126
+ }
127
+
128
+ ChannelArgs ChannelArgs::Remove(absl::string_view key) const {
129
+ return ChannelArgs(args_.Remove(key));
130
+ }
131
+
132
+ absl::optional<int> ChannelArgs::GetInt(absl::string_view name) const {
133
+ auto* v = Get(name);
134
+ if (v == nullptr) return absl::nullopt;
135
+ if (!absl::holds_alternative<int>(*v)) return absl::nullopt;
136
+ return absl::get<int>(*v);
137
+ }
138
+
139
+ absl::optional<Duration> ChannelArgs::GetDurationFromIntMillis(
140
+ absl::string_view name) const {
141
+ auto ms = GetInt(name);
142
+ if (!ms.has_value()) return absl::nullopt;
143
+ if (*ms == INT_MAX) return Duration::Infinity();
144
+ if (*ms == INT_MIN) return Duration::NegativeInfinity();
145
+ return Duration::Milliseconds(*ms);
146
+ }
147
+
148
+ absl::optional<absl::string_view> ChannelArgs::GetString(
149
+ absl::string_view name) const {
150
+ auto* v = Get(name);
151
+ if (v == nullptr) return absl::nullopt;
152
+ if (!absl::holds_alternative<std::string>(*v)) return absl::nullopt;
153
+ return absl::get<std::string>(*v);
154
+ }
155
+
156
+ void* ChannelArgs::GetVoidPointer(absl::string_view name) const {
157
+ auto* v = Get(name);
158
+ if (v == nullptr) return nullptr;
159
+ if (!absl::holds_alternative<Pointer>(*v)) return nullptr;
160
+ return absl::get<Pointer>(*v).c_pointer();
161
+ }
162
+
163
+ } // namespace grpc_core
40
164
 
41
165
  static grpc_arg copy_arg(const grpc_arg* src) {
42
166
  grpc_arg dst;
@@ -156,16 +280,8 @@ static int cmp_arg(const grpc_arg* a, const grpc_arg* b) {
156
280
  case GRPC_ARG_INTEGER:
157
281
  return grpc_core::QsortCompare(a->value.integer, b->value.integer);
158
282
  case GRPC_ARG_POINTER:
159
- c = grpc_core::QsortCompare(a->value.pointer.p, b->value.pointer.p);
160
- if (c != 0) {
161
- c = grpc_core::QsortCompare(a->value.pointer.vtable,
162
- b->value.pointer.vtable);
163
- if (c == 0) {
164
- c = a->value.pointer.vtable->cmp(a->value.pointer.p,
165
- b->value.pointer.p);
166
- }
167
- }
168
- return c;
283
+ return PointerCompare(a->value.pointer.p, a->value.pointer.vtable,
284
+ b->value.pointer.p, b->value.pointer.vtable);
169
285
  }
170
286
  GPR_UNREACHABLE_CODE(return 0);
171
287
  }
@@ -369,25 +485,11 @@ std::string grpc_channel_args_string(const grpc_channel_args* args) {
369
485
  }
370
486
 
371
487
  namespace grpc_core {
372
- const grpc_channel_args* RemoveGrpcInternalArgs(const grpc_channel_args* src) {
373
- if (src == nullptr) return nullptr;
374
- // Create result.
375
- grpc_channel_args* dst =
376
- static_cast<grpc_channel_args*>(gpr_malloc(sizeof(grpc_channel_args)));
377
- dst->args =
378
- static_cast<grpc_arg*>(gpr_malloc(sizeof(grpc_arg) * src->num_args));
379
- dst->num_args = 0;
380
- for (size_t i = 0; i < src->num_args; ++i) {
381
- if (absl::StartsWith(src->args[i].key, "grpc.internal.")) continue;
382
- dst->args[dst->num_args++] = copy_arg(&src->args[i]);
383
- }
384
- return dst;
385
- }
386
-
387
- const grpc_channel_args* UniquifyChannelArgKeys(const grpc_channel_args* src) {
388
- if (src == nullptr) return nullptr;
389
- std::map<absl::string_view, const grpc_arg*> values;
390
- std::map<absl::string_view, std::vector<std::string>> concatenated_values;
488
+ ChannelArgs ChannelArgsBuiltinPrecondition(const grpc_channel_args* src) {
489
+ if (src == nullptr) return ChannelArgs();
490
+ ChannelArgs output;
491
+ std::map<absl::string_view, std::vector<absl::string_view>>
492
+ concatenated_values;
391
493
  for (size_t i = 0; i < src->num_args; i++) {
392
494
  absl::string_view key = src->args[i].key;
393
495
  // User-agent strings were traditionally multi-valued and concatenated.
@@ -401,46 +503,23 @@ const grpc_channel_args* UniquifyChannelArgKeys(const grpc_channel_args* src) {
401
503
  concatenated_values[key].push_back(src->args[i].value.string);
402
504
  }
403
505
  continue;
506
+ } else if (absl::StartsWith(key, "grpc.internal.")) {
507
+ continue;
404
508
  }
405
- auto it = values.find(key);
406
- if (it == values.end()) {
407
- values[key] = &src->args[i];
509
+ if (!output.Contains(key)) {
510
+ output = output.Set(src->args[i]);
408
511
  } else {
409
512
  // Traditional grpc_channel_args_find behavior was to pick the first
410
513
  // value.
411
514
  // For compatibility with existing users, we will do the same here.
412
515
  }
413
516
  }
414
- if (values.size() + concatenated_values.size() == src->num_args) {
415
- return grpc_channel_args_copy(src);
416
- }
417
517
  // Concatenate the concatenated values.
418
- std::map<absl::string_view, std::string> concatenated_values_str;
419
518
  for (const auto& concatenated_value : concatenated_values) {
420
- concatenated_values_str[concatenated_value.first] =
421
- absl::StrJoin(concatenated_value.second, " ");
422
- }
423
- // Create the result
424
- std::vector<grpc_arg> argv;
425
- argv.reserve(values.size());
426
- for (const auto& a : values) {
427
- argv.push_back(*a.second);
428
- }
429
- for (const auto& a : concatenated_values_str) {
430
- argv.push_back(
431
- grpc_channel_arg_string_create(const_cast<char*>(a.first.data()),
432
- const_cast<char*>(a.second.c_str())));
519
+ output = output.Set(concatenated_value.first,
520
+ absl::StrJoin(concatenated_value.second, " "));
433
521
  }
434
- grpc_channel_args args = {argv.size(), argv.data()};
435
- // Log that we're mutating things
436
- gpr_log(GPR_INFO,
437
- "Uniquification pass on channel args is mutating them: {%s} is being "
438
- "changed to {%s}",
439
- grpc_channel_args_string(src).c_str(),
440
- grpc_channel_args_string(&args).c_str());
441
- // Return the result (note we need to copy because we're borrowing the args
442
- // from src still!)
443
- return grpc_channel_args_copy(&args);
522
+ return output;
444
523
  }
445
524
  } // namespace grpc_core
446
525
 
@@ -23,12 +23,218 @@
23
23
 
24
24
  #include <string>
25
25
 
26
+ #include "absl/strings/string_view.h"
27
+ #include "absl/types/optional.h"
28
+ #include "absl/types/variant.h"
29
+ #include "absl/utility/utility.h"
30
+
26
31
  #include <grpc/impl/codegen/grpc_types.h>
27
32
 
33
+ #include "src/core/lib/avl/avl.h"
34
+ #include "src/core/lib/gpr/useful.h"
35
+ #include "src/core/lib/gprpp/dual_ref_counted.h"
36
+ #include "src/core/lib/gprpp/ref_counted.h"
37
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
38
+ #include "src/core/lib/gprpp/time.h"
28
39
  #include "src/core/lib/surface/channel_stack_type.h"
29
40
 
30
41
  // Channel args are intentionally immutable, to avoid the need for locking.
31
42
 
43
+ namespace grpc_core {
44
+
45
+ // Define a traits object for vtable lookup - allows us to integrate with
46
+ // existing code easily (just define the trait!) and allows some magic in
47
+ // ChannelArgs to automatically derive a vtable from a T*.
48
+ // To participate as a pointer, instances should expose the function:
49
+ // // Gets the vtable for this type
50
+ // static const grpc_channel_arg_vtable* VTable();
51
+ // // Performs any mutations required for channel args to own a pointer
52
+ // // Only needed if ChannelArgs::Set is to be called with a raw pointer.
53
+ // static void* TakeUnownedPointer(T* p);
54
+ template <typename T, typename Ignored = void /* for SFINAE */>
55
+ struct ChannelArgTypeTraits;
56
+
57
+ // Specialization for ref-counted pointers.
58
+ // Types should expose:
59
+ // static int ChannelArgsCompare(const T* a, const T* b);
60
+ template <typename T>
61
+ struct ChannelArgTypeTraits<
62
+ T,
63
+ absl::enable_if_t<
64
+ std::is_base_of<RefCounted<T>, T>::value ||
65
+ std::is_base_of<RefCounted<T, NonPolymorphicRefCount>, T>::value ||
66
+ std::is_base_of<DualRefCounted<T>, T>::value,
67
+ void>> {
68
+ static const grpc_arg_pointer_vtable* VTable() {
69
+ static const grpc_arg_pointer_vtable tbl = {
70
+ // copy
71
+ [](void* p) -> void* { return static_cast<T*>(p)->Ref().release(); },
72
+ // destroy
73
+ [](void* p) { static_cast<T*>(p)->Unref(); },
74
+ // compare
75
+ [](void* p1, void* p2) {
76
+ return T::ChannelArgsCompare(static_cast<const T*>(p1),
77
+ static_cast<const T*>(p2));
78
+ },
79
+ };
80
+ return &tbl;
81
+ };
82
+ };
83
+
84
+ template <typename T>
85
+ struct ChannelArgTypeTraits<T,
86
+ absl::void_t<typename T::RawPointerChannelArgTag>> {
87
+ static void* TakeUnownedPointer(T* p) { return p; }
88
+ static const grpc_arg_pointer_vtable* VTable() {
89
+ static const grpc_arg_pointer_vtable tbl = {
90
+ // copy
91
+ [](void* p) -> void* { return p; },
92
+ // destroy
93
+ [](void*) {},
94
+ // compare
95
+ [](void* p1, void* p2) { return QsortCompare(p1, p2); },
96
+ };
97
+ return &tbl;
98
+ };
99
+ };
100
+
101
+ class ChannelArgs {
102
+ public:
103
+ class Pointer {
104
+ public:
105
+ Pointer(void* p, const grpc_arg_pointer_vtable* vtable)
106
+ : p_(p), vtable_(vtable == nullptr ? EmptyVTable() : vtable) {}
107
+ ~Pointer() { vtable_->destroy(p_); }
108
+
109
+ Pointer(const Pointer& other)
110
+ : p_(other.vtable_->copy(other.p_)), vtable_(other.vtable_) {}
111
+ Pointer& operator=(Pointer other) {
112
+ std::swap(p_, other.p_);
113
+ std::swap(vtable_, other.vtable_);
114
+ return *this;
115
+ }
116
+ Pointer(Pointer&& other) noexcept : p_(other.p_), vtable_(other.vtable_) {
117
+ other.p_ = nullptr;
118
+ other.vtable_ = EmptyVTable();
119
+ }
120
+ Pointer& operator=(Pointer&& other) noexcept {
121
+ std::swap(p_, other.p_);
122
+ std::swap(vtable_, other.vtable_);
123
+ return *this;
124
+ }
125
+
126
+ bool operator==(const Pointer& rhs) const;
127
+ bool operator<(const Pointer& rhs) const;
128
+ bool operator!=(const Pointer& rhs) const { return !(*this == rhs); }
129
+
130
+ void* c_pointer() const { return p_; }
131
+
132
+ const grpc_arg_pointer_vtable* c_vtable() const { return vtable_; }
133
+
134
+ private:
135
+ static const grpc_arg_pointer_vtable* EmptyVTable() {
136
+ static const grpc_arg_pointer_vtable vtable = {
137
+ // copy
138
+ [](void* p) { return p; },
139
+ // destroy
140
+ [](void*) {},
141
+ // cmp
142
+ [](void* p1, void* p2) -> int { return QsortCompare(p1, p2); },
143
+ };
144
+ return &vtable;
145
+ }
146
+
147
+ void* p_;
148
+ const grpc_arg_pointer_vtable* vtable_;
149
+ };
150
+ using Value = absl::variant<int, std::string, Pointer>;
151
+
152
+ ChannelArgs();
153
+
154
+ static ChannelArgs FromC(const grpc_channel_args* args);
155
+ // Construct a new grpc_channel_args struct which the caller will own.
156
+ // It should be destroyed with grpc_channel_args_destroy.
157
+ const grpc_channel_args* ToC() const;
158
+
159
+ const Value* Get(absl::string_view name) const { return args_.Lookup(name); }
160
+ GRPC_MUST_USE_RESULT ChannelArgs Set(absl::string_view name,
161
+ Value value) const;
162
+ GRPC_MUST_USE_RESULT ChannelArgs Set(absl::string_view name,
163
+ absl::string_view value) const;
164
+ GRPC_MUST_USE_RESULT ChannelArgs Set(absl::string_view name,
165
+ std::string value) const;
166
+ GRPC_MUST_USE_RESULT ChannelArgs Set(absl::string_view name,
167
+ const char* value) const;
168
+ GRPC_MUST_USE_RESULT ChannelArgs Set(grpc_arg arg) const;
169
+ template <typename T>
170
+ GRPC_MUST_USE_RESULT absl::enable_if_t<
171
+ std::is_same<const grpc_arg_pointer_vtable*,
172
+ decltype(ChannelArgTypeTraits<T>::VTable())>::value,
173
+ ChannelArgs>
174
+ Set(absl::string_view name, T* value) const {
175
+ return Set(name, Pointer(ChannelArgTypeTraits<T>::TakeUnownedPointer(value),
176
+ ChannelArgTypeTraits<T>::VTable()));
177
+ }
178
+ template <typename T>
179
+ GRPC_MUST_USE_RESULT auto Set(absl::string_view name,
180
+ const RefCountedPtr<T>& value) const
181
+ -> absl::enable_if_t<
182
+ std::is_same<
183
+ const grpc_arg_pointer_vtable*,
184
+ decltype(ChannelArgTypeTraits<absl::remove_cvref_t<
185
+ decltype(*value->Ref())>>::VTable())>::value,
186
+ ChannelArgs> {
187
+ auto store_value = value->Ref();
188
+ return Set(
189
+ name,
190
+ Pointer(store_value.release(),
191
+ ChannelArgTypeTraits<
192
+ absl::remove_cvref_t<decltype(*store_value)>>::VTable()));
193
+ }
194
+ GRPC_MUST_USE_RESULT ChannelArgs Remove(absl::string_view name) const;
195
+ bool Contains(absl::string_view name) const { return Get(name) != nullptr; }
196
+
197
+ absl::optional<int> GetInt(absl::string_view name) const;
198
+ absl::optional<absl::string_view> GetString(absl::string_view name) const;
199
+ void* GetVoidPointer(absl::string_view name) const;
200
+ template <typename T>
201
+ T* GetPointer(absl::string_view name) const {
202
+ return static_cast<T*>(GetVoidPointer(name));
203
+ }
204
+ absl::optional<Duration> GetDurationFromIntMillis(
205
+ absl::string_view name) const;
206
+
207
+ // Object based get/set.
208
+ // Deal with the common case that we set a pointer to an object under
209
+ // the same name in every usage.
210
+ // Expects ChannelArgTypeTraits to exist for T, and T to expose:
211
+ // static string_view ChannelArgName();
212
+ template <typename T>
213
+ GRPC_MUST_USE_RESULT ChannelArgs SetObject(T* p) const {
214
+ return Set(T::ChannelArgName(), p);
215
+ }
216
+ template <typename T>
217
+ GRPC_MUST_USE_RESULT ChannelArgs SetObject(RefCountedPtr<T> p) const {
218
+ return Set(T::ChannelArgName(), std::move(p));
219
+ }
220
+ template <typename T>
221
+ T* GetObject() {
222
+ return GetPointer<T>(T::ChannelArgName());
223
+ }
224
+
225
+ bool operator<(const ChannelArgs& other) const { return args_ < other.args_; }
226
+ bool operator==(const ChannelArgs& other) const {
227
+ return args_ == other.args_;
228
+ }
229
+
230
+ private:
231
+ explicit ChannelArgs(AVL<std::string, Value> args) : args_(std::move(args)) {}
232
+
233
+ AVL<std::string, Value> args_;
234
+ };
235
+
236
+ } // namespace grpc_core
237
+
32
238
  /** Copy the arguments in \a src into a new instance */
33
239
  grpc_channel_args* grpc_channel_args_copy(const grpc_channel_args* src);
34
240
 
@@ -120,15 +326,10 @@ grpc_arg grpc_channel_arg_pointer_create(char* name, void* value,
120
326
  std::string grpc_channel_args_string(const grpc_channel_args* args);
121
327
 
122
328
  namespace grpc_core {
123
- /** Remove any channel args prefixed with 'grpc.internal.'
124
- * These are used for internal implementation details and are not intended to
125
- * be exposed to users.
126
- * Returns a new channel args instance.
127
- * Does not take ownership of \a src.
128
- * Should be called by any public API that receives channel args. */
129
- const grpc_channel_args* RemoveGrpcInternalArgs(const grpc_channel_args* src);
130
- /** Ensure no duplicate channel args, in preparation for moving to a map<> */
131
- const grpc_channel_args* UniquifyChannelArgKeys(const grpc_channel_args* src);
329
+ // Ensure no duplicate channel args (with some backwards compatibility hacks).
330
+ // Eliminate any grpc.internal.* args.
331
+ // Return a C++ object.
332
+ ChannelArgs ChannelArgsBuiltinPrecondition(const grpc_channel_args* src);
132
333
  } // namespace grpc_core
133
334
 
134
335
  // Takes ownership of the old_args
@@ -25,10 +25,6 @@ void ChannelArgsPreconditioning::Builder::RegisterStage(Stage stage) {
25
25
  }
26
26
 
27
27
  ChannelArgsPreconditioning ChannelArgsPreconditioning::Builder::Build() {
28
- // TODO(ctiller): should probably make this registered too.
29
- stages_.emplace_back(RemoveGrpcInternalArgs);
30
- stages_.emplace_back(UniquifyChannelArgKeys);
31
-
32
28
  ChannelArgsPreconditioning preconditioning;
33
29
  preconditioning.stages_ = std::move(stages_);
34
30
  return preconditioning;
@@ -36,13 +32,11 @@ ChannelArgsPreconditioning ChannelArgsPreconditioning::Builder::Build() {
36
32
 
37
33
  const grpc_channel_args* ChannelArgsPreconditioning::PreconditionChannelArgs(
38
34
  const grpc_channel_args* args) const {
39
- const grpc_channel_args* owned_args = nullptr;
35
+ ChannelArgs channel_args = ChannelArgsBuiltinPrecondition(args);
40
36
  for (auto& stage : stages_) {
41
- args = stage(args);
42
- grpc_channel_args_destroy(owned_args);
43
- owned_args = args;
37
+ channel_args = stage(std::move(channel_args));
44
38
  }
45
- return args;
39
+ return channel_args.ToC();
46
40
  }
47
41
 
48
42
  } // namespace grpc_core
@@ -33,8 +33,7 @@ class ChannelArgsPreconditioning {
33
33
  // Take channel args and mutate them.
34
34
  // Does not take ownership of the channel args passed in.
35
35
  // Returns a new channel args object that is owned by the caller.
36
- using Stage =
37
- std::function<const grpc_channel_args*(const grpc_channel_args*)>;
36
+ using Stage = std::function<ChannelArgs(ChannelArgs)>;
38
37
 
39
38
  class Builder {
40
39
  public:
@@ -69,8 +69,6 @@ typedef struct grpc_call_element grpc_call_element;
69
69
  typedef struct grpc_channel_stack grpc_channel_stack;
70
70
  typedef struct grpc_call_stack grpc_call_stack;
71
71
 
72
- #define GRPC_ARG_TRANSPORT "grpc.internal.transport"
73
-
74
72
  struct grpc_channel_element_args {
75
73
  grpc_channel_stack* channel_stack;
76
74
  const grpc_channel_args* channel_args;
@@ -122,9 +120,8 @@ struct grpc_channel_filter {
122
120
  - allocation of memory for call data
123
121
  There is an on-going migration to move all filters to providing this, and
124
122
  then to drop start_transport_stream_op_batch. */
125
- grpc_core::ArenaPromise<grpc_core::TrailingMetadata> (*make_call_promise)(
126
- grpc_channel_element* elem,
127
- grpc_core::ClientInitialMetadata initial_metadata,
123
+ grpc_core::ArenaPromise<grpc_core::ServerMetadataHandle> (*make_call_promise)(
124
+ grpc_channel_element* elem, grpc_core::CallArgs call_args,
128
125
  grpc_core::NextPromiseFactory next_promise_factory);
129
126
  /* Called to handle channel level operations - e.g. new calls, or transport
130
127
  closure.