grpc 1.31.0.pre1 → 1.33.0.pre1

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 (614) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +693 -16022
  3. data/include/grpc/grpc.h +0 -5
  4. data/include/grpc/grpc_security.h +47 -14
  5. data/include/grpc/impl/codegen/README.md +22 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +0 -5
  7. data/include/grpc/impl/codegen/port_platform.h +6 -1
  8. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -2
  9. data/src/core/ext/filters/client_channel/client_channel.cc +264 -186
  10. data/src/core/ext/filters/client_channel/client_channel.h +1 -1
  11. data/src/core/ext/filters/client_channel/client_channel_channelz.h +0 -3
  12. data/src/core/ext/filters/client_channel/config_selector.cc +0 -4
  13. data/src/core/ext/filters/client_channel/config_selector.h +34 -5
  14. data/src/core/ext/filters/client_channel/health/health_check_client.cc +6 -1
  15. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +2 -3
  16. data/src/core/ext/filters/client_channel/lb_policy.h +3 -1
  17. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +48 -35
  18. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
  19. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +9 -6
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +126 -119
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -13
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +0 -3
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -37
  24. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +21 -15
  25. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +32 -13
  26. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +8 -7
  27. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +9 -32
  28. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +26 -16
  29. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +207 -129
  30. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +453 -255
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/eds_drop.cc +571 -0
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +727 -0
  33. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
  34. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +1 -1
  35. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +3 -3
  36. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  37. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  38. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
  39. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  40. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +602 -58
  41. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +28 -0
  42. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +8 -39
  43. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +4 -3
  44. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +49 -47
  45. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +5 -9
  46. data/src/core/ext/filters/client_channel/server_address.cc +120 -7
  47. data/src/core/ext/filters/client_channel/server_address.h +48 -21
  48. data/src/core/ext/filters/client_channel/service_config.cc +16 -13
  49. data/src/core/ext/filters/client_channel/service_config.h +7 -4
  50. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
  51. data/src/core/ext/filters/client_channel/service_config_parser.cc +8 -6
  52. data/src/core/ext/filters/client_channel/service_config_parser.h +8 -5
  53. data/src/core/ext/filters/client_channel/subchannel.cc +64 -23
  54. data/src/core/ext/filters/client_channel/subchannel.h +16 -4
  55. data/src/core/ext/filters/client_channel/subchannel_interface.h +44 -0
  56. data/src/core/ext/filters/max_age/max_age_filter.cc +2 -1
  57. data/src/core/ext/filters/message_size/message_size_filter.cc +2 -1
  58. data/src/core/ext/filters/message_size/message_size_filter.h +2 -1
  59. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +87 -31
  60. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +18 -1
  61. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +10 -35
  62. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +19 -25
  63. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -1
  64. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -2
  65. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +6 -6
  66. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -2
  67. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +256 -287
  68. data/src/core/ext/transport/chttp2/transport/flow_control.cc +11 -3
  69. data/src/core/ext/transport/chttp2/transport/flow_control.h +10 -0
  70. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  71. data/src/core/ext/transport/chttp2/transport/internal.h +10 -1
  72. data/src/core/ext/transport/chttp2/transport/parsing.cc +17 -30
  73. data/src/core/ext/transport/chttp2/transport/writing.cc +6 -5
  74. data/src/core/ext/transport/inproc/inproc_transport.cc +12 -12
  75. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +244 -0
  76. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +766 -0
  77. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  78. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
  79. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +458 -0
  80. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1635 -0
  81. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/filter.upb.c +8 -8
  82. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
  83. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/outlier_detection.upb.c +8 -8
  84. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
  85. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +124 -0
  86. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +379 -0
  87. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/backoff.upb.c +8 -8
  88. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
  89. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +310 -0
  90. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
  91. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +103 -0
  92. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +351 -0
  93. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  94. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
  95. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +53 -0
  96. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +133 -0
  97. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +241 -0
  98. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +752 -0
  99. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
  100. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
  101. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/http_uri.upb.c +8 -8
  102. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
  103. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +176 -0
  104. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +645 -0
  105. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
  106. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
  107. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/socket_option.upb.c +6 -6
  108. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
  109. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +36 -0
  110. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +85 -0
  111. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
  112. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
  113. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
  114. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
  115. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  116. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
  117. data/src/core/ext/upb-generated/envoy/config/listener/{v2 → v3}/api_listener.upb.c +8 -8
  118. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
  119. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +128 -0
  120. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +467 -0
  121. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +155 -0
  122. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +539 -0
  123. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
  124. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
  125. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +178 -0
  126. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +616 -0
  127. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
  128. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
  129. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +900 -0
  130. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +3290 -0
  131. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +60 -0
  132. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +139 -0
  133. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
  134. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
  135. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +364 -0
  136. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1336 -0
  137. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
  138. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
  139. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +110 -0
  140. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +387 -0
  141. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +76 -0
  142. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +214 -0
  143. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +147 -0
  144. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +570 -0
  145. data/src/core/ext/upb-generated/envoy/{api/v2 → service/cluster/v3}/cds.upb.c +5 -6
  146. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
  147. data/src/core/ext/upb-generated/envoy/service/discovery/{v2 → v3}/ads.upb.c +5 -4
  148. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
  149. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +139 -0
  150. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +449 -0
  151. data/src/core/ext/upb-generated/envoy/{api/v2 → service/endpoint/v3}/eds.upb.c +5 -6
  152. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
  153. data/src/core/ext/upb-generated/envoy/{api/v2 → service/listener/v3}/lds.upb.c +5 -6
  154. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
  155. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
  156. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
  157. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/rds.upb.c +5 -6
  158. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
  159. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/srds.upb.c +5 -6
  160. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
  161. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
  162. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
  163. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  164. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
  165. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  166. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
  167. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
  168. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
  169. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +54 -0
  170. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +133 -0
  171. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  172. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
  173. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  174. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
  175. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  176. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
  177. data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +2 -2
  178. data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +8 -8
  179. data/src/core/ext/upb-generated/envoy/type/{percent.upb.c → v3/percent.upb.c} +9 -8
  180. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
  181. data/src/core/ext/upb-generated/envoy/type/{range.upb.c → v3/range.upb.c} +12 -11
  182. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
  183. data/src/core/ext/upb-generated/envoy/type/{semantic_version.upb.c → v3/semantic_version.upb.c} +6 -5
  184. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
  185. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +242 -0
  186. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +753 -0
  187. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
  188. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
  189. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +36 -36
  190. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +1 -1
  191. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -0
  192. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +57 -0
  193. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  194. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
  195. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.c +28 -0
  196. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +53 -0
  197. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +52 -0
  198. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +129 -0
  199. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +42 -0
  200. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +77 -0
  201. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +36 -0
  202. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +85 -0
  203. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +54 -0
  204. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +160 -0
  205. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +36 -0
  206. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +84 -0
  207. data/src/core/ext/upb-generated/validate/validate.upb.c +11 -11
  208. data/src/core/ext/upb-generated/validate/validate.upb.h +1 -1
  209. data/src/core/ext/xds/certificate_provider_factory.h +59 -0
  210. data/src/core/ext/xds/certificate_provider_registry.cc +103 -0
  211. data/src/core/ext/xds/certificate_provider_registry.h +57 -0
  212. data/src/core/ext/xds/certificate_provider_store.h +50 -0
  213. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +377 -0
  214. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +102 -0
  215. data/src/core/ext/xds/xds_api.cc +2596 -0
  216. data/src/core/ext/xds/xds_api.h +397 -0
  217. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.cc +44 -2
  218. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.h +8 -3
  219. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_args.h +9 -6
  220. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +541 -785
  221. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.h +114 -93
  222. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +20 -14
  223. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +36 -8
  224. data/src/core/lib/channel/channel_args.h +0 -1
  225. data/src/core/lib/channel/channelz.cc +24 -60
  226. data/src/core/lib/channel/channelz.h +12 -20
  227. data/src/core/lib/channel/channelz_registry.cc +15 -12
  228. data/src/core/lib/channel/channelz_registry.h +3 -0
  229. data/src/core/lib/gpr/sync_posix.cc +2 -8
  230. data/src/core/lib/gpr/time_precise.cc +2 -0
  231. data/src/core/lib/gpr/time_precise.h +6 -2
  232. data/src/core/lib/gprpp/dual_ref_counted.h +336 -0
  233. data/src/core/lib/gprpp/ref_counted.h +51 -22
  234. data/src/core/lib/gprpp/ref_counted_ptr.h +153 -0
  235. data/src/core/lib/iomgr/endpoint.cc +5 -1
  236. data/src/core/lib/iomgr/endpoint.h +7 -3
  237. data/src/core/lib/iomgr/endpoint_cfstream.cc +36 -11
  238. data/src/core/lib/iomgr/ev_posix.cc +0 -2
  239. data/src/core/lib/iomgr/exec_ctx.h +10 -8
  240. data/src/core/lib/iomgr/iomgr.cc +0 -10
  241. data/src/core/lib/iomgr/iomgr.h +0 -10
  242. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.cc +1 -1
  243. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.h +3 -3
  244. data/src/core/lib/iomgr/sockaddr_utils.cc +2 -1
  245. data/src/core/lib/iomgr/sockaddr_utils.h +2 -1
  246. data/src/core/lib/iomgr/tcp_custom.cc +32 -16
  247. data/src/core/lib/iomgr/tcp_posix.cc +31 -13
  248. data/src/core/lib/iomgr/tcp_windows.cc +26 -10
  249. data/src/core/lib/json/json_util.cc +58 -0
  250. data/src/core/lib/json/json_util.h +37 -0
  251. data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
  252. data/src/core/lib/security/authorization/authorization_engine.h +84 -0
  253. data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
  254. data/src/core/lib/security/authorization/evaluate_args.h +59 -0
  255. data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
  256. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +42 -0
  257. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +68 -0
  258. data/src/core/lib/security/authorization/mock_cel/cel_value.h +93 -0
  259. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
  260. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +56 -0
  261. data/src/core/lib/security/authorization/mock_cel/statusor.h +50 -0
  262. data/src/core/lib/security/certificate_provider.h +60 -0
  263. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +56 -38
  264. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +321 -0
  265. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +214 -0
  266. data/src/core/lib/security/credentials/xds/xds_credentials.cc +45 -0
  267. data/src/core/lib/security/credentials/xds/xds_credentials.h +51 -0
  268. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +7 -12
  269. data/src/core/lib/security/security_connector/ssl_utils.h +5 -0
  270. data/src/core/lib/security/transport/secure_endpoint.cc +7 -1
  271. data/src/core/lib/surface/call.cc +12 -12
  272. data/src/core/lib/surface/call.h +2 -1
  273. data/src/core/lib/surface/channel.cc +37 -51
  274. data/src/core/lib/surface/channel.h +18 -3
  275. data/src/core/lib/surface/completion_queue.cc +10 -272
  276. data/src/core/lib/surface/completion_queue.h +0 -8
  277. data/src/core/lib/surface/init.cc +27 -12
  278. data/src/core/lib/surface/server.cc +1066 -1244
  279. data/src/core/lib/surface/server.h +363 -87
  280. data/src/core/lib/surface/version.cc +2 -2
  281. data/src/core/lib/transport/authority_override.cc +38 -0
  282. data/src/core/lib/transport/authority_override.h +32 -0
  283. data/src/core/lib/transport/bdp_estimator.h +2 -1
  284. data/src/core/lib/transport/connectivity_state.cc +18 -13
  285. data/src/core/lib/transport/connectivity_state.h +20 -8
  286. data/src/core/lib/transport/error_utils.cc +13 -0
  287. data/src/core/lib/transport/error_utils.h +6 -0
  288. data/src/core/lib/transport/metadata.cc +11 -1
  289. data/src/core/lib/transport/static_metadata.cc +295 -276
  290. data/src/core/lib/transport/static_metadata.h +80 -73
  291. data/src/core/lib/transport/transport.h +7 -0
  292. data/src/core/lib/uri/uri_parser.cc +23 -21
  293. data/src/core/lib/uri/uri_parser.h +3 -1
  294. data/src/core/plugin_registry/grpc_plugin_registry.cc +35 -20
  295. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +22 -0
  296. data/src/core/tsi/ssl_transport_security.cc +2 -2
  297. data/src/ruby/bin/math_services_pb.rb +4 -4
  298. data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
  299. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -4
  300. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +7 -7
  301. data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
  302. data/src/ruby/lib/grpc/version.rb +1 -1
  303. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
  304. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +5 -0
  305. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +28 -12
  306. data/src/ruby/spec/channel_credentials_spec.rb +10 -0
  307. data/src/ruby/spec/generic/active_call_spec.rb +19 -8
  308. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  309. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  310. data/src/ruby/spec/pb/codegen/package_option_spec.rb +20 -0
  311. data/src/ruby/spec/user_agent_spec.rb +74 -0
  312. data/third_party/abseil-cpp/absl/algorithm/container.h +1727 -0
  313. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +161 -0
  314. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  315. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  316. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  317. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  318. data/third_party/abseil-cpp/absl/container/fixed_array.h +515 -0
  319. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
  320. data/third_party/abseil-cpp/absl/container/internal/common.h +202 -0
  321. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +440 -0
  322. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +146 -0
  323. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +191 -0
  324. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  325. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +269 -0
  326. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +297 -0
  327. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
  328. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +49 -0
  329. data/third_party/abseil-cpp/absl/container/internal/layout.h +741 -0
  330. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
  331. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1882 -0
  332. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +138 -0
  333. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  334. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1895 -0
  335. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  336. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  337. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  338. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +192 -0
  339. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +125 -0
  340. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +70 -0
  341. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +99 -0
  342. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
  343. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  344. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +85 -0
  345. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  346. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +128 -0
  347. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +194 -0
  348. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  349. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  350. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  351. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +25 -0
  352. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  353. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1480 -0
  354. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  355. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  356. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  357. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  358. data/third_party/abseil-cpp/absl/hash/hash.h +324 -0
  359. data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
  360. data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
  361. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
  362. data/third_party/abseil-cpp/absl/hash/internal/hash.h +988 -0
  363. data/third_party/abseil-cpp/absl/status/status.cc +447 -0
  364. data/third_party/abseil-cpp/absl/status/status.h +428 -0
  365. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +43 -0
  366. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  367. data/third_party/abseil-cpp/absl/strings/cord.cc +2019 -0
  368. data/third_party/abseil-cpp/absl/strings/cord.h +1121 -0
  369. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +151 -0
  370. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  371. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  372. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  373. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  374. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  375. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  376. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
  377. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  378. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
  379. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +261 -0
  380. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  381. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  382. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +484 -0
  383. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
  384. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2728 -0
  385. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1056 -0
  386. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  387. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  388. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  389. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  390. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  391. data/third_party/abseil-cpp/absl/types/variant.h +861 -0
  392. data/third_party/boringssl-with-bazel/err_data.c +475 -467
  393. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +0 -6
  394. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +9 -43
  395. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +55 -4
  396. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +34 -0
  397. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +4 -0
  398. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +16 -0
  399. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +6 -2
  400. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +2 -0
  401. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +4 -0
  402. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +30 -10
  403. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +10 -15
  404. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +543 -0
  405. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +237 -0
  406. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +44 -2
  407. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +221 -49
  408. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +64 -20
  409. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +3 -3
  410. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +0 -8
  411. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +3 -3
  412. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +1 -1
  413. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +7 -2
  414. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +21 -18
  415. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -1
  416. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +24 -3
  417. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +3 -3
  418. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +67 -67
  419. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +3 -3
  420. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +29 -35
  421. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +13 -2
  422. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +9 -8
  423. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +10 -10
  424. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +2 -2
  425. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +28 -40
  426. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +20 -0
  427. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +3 -1
  428. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +1 -4
  429. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +7 -3
  430. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +2 -2
  431. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +1 -1
  432. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +55 -8
  433. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -1
  434. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +52 -0
  435. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +0 -1
  436. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +2 -2
  437. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +6 -0
  438. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +1 -1
  439. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +12 -0
  440. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +9 -0
  441. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +4 -1
  442. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +48 -9
  443. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +2 -3
  444. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +26 -6
  445. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +199 -78
  446. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +52 -43
  447. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +18 -18
  448. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -3
  449. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1 -1
  450. data/third_party/boringssl-with-bazel/src/ssl/internal.h +13 -9
  451. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +3 -6
  452. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +8 -9
  453. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +10 -0
  454. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +34 -9
  455. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -2
  456. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +4 -8
  457. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +7 -2
  458. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
  459. data/third_party/re2/re2/bitmap256.h +117 -0
  460. data/third_party/re2/re2/bitstate.cc +385 -0
  461. data/third_party/re2/re2/compile.cc +1279 -0
  462. data/third_party/re2/re2/dfa.cc +2130 -0
  463. data/third_party/re2/re2/filtered_re2.cc +121 -0
  464. data/third_party/re2/re2/filtered_re2.h +109 -0
  465. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  466. data/third_party/re2/re2/nfa.cc +713 -0
  467. data/third_party/re2/re2/onepass.cc +623 -0
  468. data/third_party/re2/re2/parse.cc +2464 -0
  469. data/third_party/re2/re2/perl_groups.cc +119 -0
  470. data/third_party/re2/re2/pod_array.h +55 -0
  471. data/third_party/re2/re2/prefilter.cc +710 -0
  472. data/third_party/re2/re2/prefilter.h +108 -0
  473. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  474. data/third_party/re2/re2/prefilter_tree.h +139 -0
  475. data/third_party/re2/re2/prog.cc +988 -0
  476. data/third_party/re2/re2/prog.h +436 -0
  477. data/third_party/re2/re2/re2.cc +1362 -0
  478. data/third_party/re2/re2/re2.h +1002 -0
  479. data/third_party/re2/re2/regexp.cc +980 -0
  480. data/third_party/re2/re2/regexp.h +659 -0
  481. data/third_party/re2/re2/set.cc +154 -0
  482. data/third_party/re2/re2/set.h +80 -0
  483. data/third_party/re2/re2/simplify.cc +657 -0
  484. data/third_party/re2/re2/sparse_array.h +392 -0
  485. data/third_party/re2/re2/sparse_set.h +264 -0
  486. data/third_party/re2/re2/stringpiece.cc +65 -0
  487. data/third_party/re2/re2/stringpiece.h +210 -0
  488. data/third_party/re2/re2/tostring.cc +351 -0
  489. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  490. data/third_party/re2/re2/unicode_casefold.h +78 -0
  491. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  492. data/third_party/re2/re2/unicode_groups.h +67 -0
  493. data/third_party/re2/re2/walker-inl.h +246 -0
  494. data/third_party/re2/util/benchmark.h +156 -0
  495. data/third_party/re2/util/flags.h +26 -0
  496. data/third_party/re2/util/logging.h +109 -0
  497. data/third_party/re2/util/malloc_counter.h +19 -0
  498. data/third_party/re2/util/mix.h +41 -0
  499. data/third_party/re2/util/mutex.h +148 -0
  500. data/third_party/re2/util/pcre.cc +1025 -0
  501. data/third_party/re2/util/pcre.h +681 -0
  502. data/third_party/re2/util/rune.cc +260 -0
  503. data/third_party/re2/util/strutil.cc +149 -0
  504. data/third_party/re2/util/strutil.h +21 -0
  505. data/third_party/re2/util/test.h +50 -0
  506. data/third_party/re2/util/utf.h +44 -0
  507. data/third_party/re2/util/util.h +42 -0
  508. data/third_party/upb/upb/decode.c +64 -15
  509. data/third_party/upb/upb/encode.c +2 -2
  510. data/third_party/upb/upb/msg.h +2 -2
  511. data/third_party/upb/upb/port_def.inc +1 -1
  512. data/third_party/upb/upb/table.c +0 -11
  513. data/third_party/upb/upb/table.int.h +0 -9
  514. data/third_party/upb/upb/upb.c +16 -14
  515. data/third_party/upb/upb/upb.h +26 -0
  516. data/third_party/upb/upb/upb.hpp +2 -0
  517. metadata +340 -153
  518. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +0 -528
  519. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +0 -1142
  520. data/src/core/ext/filters/client_channel/xds/xds_api.cc +0 -2110
  521. data/src/core/ext/filters/client_channel/xds/xds_api.h +0 -345
  522. data/src/core/ext/filters/client_channel/xds/xds_channel.h +0 -46
  523. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +0 -106
  524. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
  525. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -34
  526. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
  527. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -429
  528. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
  529. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -198
  530. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
  531. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -388
  532. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -52
  533. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
  534. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1453
  535. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
  536. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -226
  537. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
  538. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -323
  539. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
  540. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -334
  541. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -79
  542. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
  543. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -891
  544. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
  545. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -328
  546. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
  547. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -71
  548. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
  549. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -649
  550. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
  551. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -693
  552. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
  553. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
  554. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -536
  555. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -88
  556. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
  557. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -386
  558. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -52
  559. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
  560. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -224
  561. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
  562. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -32
  563. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
  564. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -273
  565. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
  566. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -332
  567. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -52
  568. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
  569. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -415
  570. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
  571. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -32
  572. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
  573. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -538
  574. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
  575. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -111
  576. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -52
  577. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
  578. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -204
  579. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
  580. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -32
  581. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
  582. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -2984
  583. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
  584. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -135
  585. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -52
  586. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
  587. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -732
  588. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
  589. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1167
  590. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
  591. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
  592. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
  593. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -49
  594. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
  595. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -136
  596. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
  597. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -145
  598. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
  599. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
  600. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
  601. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
  602. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -86
  603. data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -111
  604. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -61
  605. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
  606. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -250
  607. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +0 -17
  608. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -29
  609. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  610. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  611. data/src/core/lib/slice/slice_hash_table.h +0 -199
  612. data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
  613. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +0 -110
  614. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c +0 -274
@@ -24,12 +24,13 @@
24
24
  #include <grpc/impl/codegen/grpc_types.h>
25
25
 
26
26
  #include "src/core/lib/iomgr/error.h"
27
+ #include "src/core/lib/surface/server.h"
27
28
 
28
29
  namespace grpc_core {
29
30
 
30
31
  /// Adds a port to \a server. Sets \a port_num to the port number.
31
32
  /// Takes ownership of \a args.
32
- grpc_error* Chttp2ServerAddPort(grpc_server* server, const char* addr,
33
+ grpc_error* Chttp2ServerAddPort(Server* server, const char* addr,
33
34
  grpc_channel_args* args, int* port_num);
34
35
 
35
36
  } // namespace grpc_core
@@ -33,8 +33,8 @@ int grpc_server_add_insecure_http2_port(grpc_server* server, const char* addr) {
33
33
  GRPC_API_TRACE("grpc_server_add_insecure_http2_port(server=%p, addr=%s)", 2,
34
34
  (server, addr));
35
35
  grpc_error* err = grpc_core::Chttp2ServerAddPort(
36
- server, addr,
37
- grpc_channel_args_copy(grpc_server_get_channel_args(server)), &port_num);
36
+ server->core_server.get(), addr,
37
+ grpc_channel_args_copy(server->core_server->channel_args()), &port_num);
38
38
  if (err != GRPC_ERROR_NONE) {
39
39
  const char* msg = grpc_error_string(err);
40
40
  gpr_log(GPR_ERROR, "%s", msg);
@@ -41,21 +41,21 @@ void grpc_server_add_insecure_channel_from_fd(grpc_server* server,
41
41
  GPR_ASSERT(reserved == nullptr);
42
42
 
43
43
  grpc_core::ExecCtx exec_ctx;
44
+ grpc_core::Server* core_server = server->core_server.get();
44
45
 
46
+ const grpc_channel_args* server_args = core_server->channel_args();
45
47
  std::string name = absl::StrCat("fd:", fd);
46
- grpc_endpoint* server_endpoint =
47
- grpc_tcp_create(grpc_fd_create(fd, name.c_str(), true),
48
- grpc_server_get_channel_args(server), name.c_str());
48
+ grpc_endpoint* server_endpoint = grpc_tcp_create(
49
+ grpc_fd_create(fd, name.c_str(), true), server_args, name.c_str());
49
50
 
50
- const grpc_channel_args* server_args = grpc_server_get_channel_args(server);
51
51
  grpc_transport* transport = grpc_create_chttp2_transport(
52
52
  server_args, server_endpoint, false /* is_client */);
53
53
 
54
- for (grpc_pollset* pollset : grpc_server_get_pollsets(server)) {
54
+ for (grpc_pollset* pollset : core_server->pollsets()) {
55
55
  grpc_endpoint_add_to_pollset(server_endpoint, pollset);
56
56
  }
57
57
 
58
- grpc_server_setup_transport(server, transport, nullptr, server_args, nullptr);
58
+ core_server->SetupTransport(transport, nullptr, server_args, nullptr);
59
59
  grpc_chttp2_transport_start_reading(transport, nullptr, nullptr);
60
60
  }
61
61
 
@@ -68,10 +68,11 @@ int grpc_server_add_secure_http2_port(grpc_server* server, const char* addr,
68
68
  args_to_add[0] = grpc_server_credentials_to_arg(creds);
69
69
  args_to_add[1] = grpc_security_connector_to_arg(sc.get());
70
70
  args =
71
- grpc_channel_args_copy_and_add(grpc_server_get_channel_args(server),
71
+ grpc_channel_args_copy_and_add(server->core_server->channel_args(),
72
72
  args_to_add, GPR_ARRAY_SIZE(args_to_add));
73
73
  // Add server port.
74
- err = grpc_core::Chttp2ServerAddPort(server, addr, args, &port_num);
74
+ err = grpc_core::Chttp2ServerAddPort(server->core_server.get(), addr, args,
75
+ &port_num);
75
76
  done:
76
77
  sc.reset(DEBUG_LOCATION, "server");
77
78
 
@@ -1,25 +1,25 @@
1
- /*
2
- *
3
- * Copyright 2018 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
1
+ //
2
+ // Copyright 2018 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
18
16
 
19
17
  #include <grpc/support/port_platform.h>
20
18
 
21
19
  #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
22
20
 
21
+ #include "absl/strings/str_format.h"
22
+
23
23
  #include <grpc/slice_buffer.h>
24
24
  #include <grpc/support/alloc.h>
25
25
  #include <grpc/support/log.h>
@@ -31,7 +31,6 @@
31
31
  #include <stdio.h>
32
32
  #include <string.h>
33
33
 
34
- #include "absl/strings/str_format.h"
35
34
  #include "src/core/ext/transport/chttp2/transport/context_list.h"
36
35
  #include "src/core/ext/transport/chttp2/transport/frame_data.h"
37
36
  #include "src/core/ext/transport/chttp2/transport/internal.h"
@@ -103,7 +102,7 @@ grpc_core::TraceFlag grpc_keepalive_trace(false, "http_keepalive");
103
102
  grpc_core::DebugOnlyTraceFlag grpc_trace_chttp2_refcount(false,
104
103
  "chttp2_refcount");
105
104
 
106
- /* forward declarations of various callbacks that we'll build closures around */
105
+ // forward declarations of various callbacks that we'll build closures around
107
106
  static void write_action_begin_locked(void* t, grpc_error* error);
108
107
  static void write_action(void* t, grpc_error* error);
109
108
  static void write_action_end(void* t, grpc_error* error);
@@ -115,18 +114,19 @@ static void continue_read_action_locked(grpc_chttp2_transport* t);
115
114
 
116
115
  static void complete_fetch(void* gs, grpc_error* error);
117
116
  static void complete_fetch_locked(void* gs, grpc_error* error);
118
- /** Set a transport level setting, and push it to our peer */
117
+ // Set a transport level setting, and push it to our peer
119
118
  static void queue_setting_update(grpc_chttp2_transport* t,
120
119
  grpc_chttp2_setting_id id, uint32_t value);
121
120
 
122
121
  static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
123
122
  grpc_error* error);
124
123
 
125
- /** Start new streams that have been created if we can */
124
+ // Start new streams that have been created if we can
126
125
  static void maybe_start_some_streams(grpc_chttp2_transport* t);
127
126
 
128
127
  static void connectivity_state_set(grpc_chttp2_transport* t,
129
128
  grpc_connectivity_state state,
129
+ const absl::Status& status,
130
130
  const char* reason);
131
131
 
132
132
  static void benign_reclaimer(void* t, grpc_error* error);
@@ -140,7 +140,6 @@ static void post_destructive_reclaimer(grpc_chttp2_transport* t);
140
140
  static void close_transport_locked(grpc_chttp2_transport* t, grpc_error* error);
141
141
  static void end_all_the_calls(grpc_chttp2_transport* t, grpc_error* error);
142
142
 
143
- static void schedule_bdp_ping_locked(grpc_chttp2_transport* t);
144
143
  static void start_bdp_ping(void* tp, grpc_error* error);
145
144
  static void finish_bdp_ping(void* tp, grpc_error* error);
146
145
  static void start_bdp_ping_locked(void* tp, grpc_error* error);
@@ -154,7 +153,7 @@ static void send_ping_locked(grpc_chttp2_transport* t,
154
153
  grpc_closure* on_complete);
155
154
  static void retry_initiate_ping_locked(void* tp, grpc_error* error);
156
155
 
157
- /** keepalive-relevant functions */
156
+ // keepalive-relevant functions
158
157
  static void init_keepalive_ping(void* arg, grpc_error* error);
159
158
  static void init_keepalive_ping_locked(void* arg, grpc_error* error);
160
159
  static void start_keepalive_ping(void* arg, grpc_error* error);
@@ -170,9 +169,9 @@ static void reset_byte_stream(void* arg, grpc_error* error);
170
169
  // GRPC_EXPERIMENTAL_DISABLE_FLOW_CONTROL
171
170
  bool g_flow_control_enabled = true;
172
171
 
173
- /*******************************************************************************
174
- * CONSTRUCTION/DESTRUCTION/REFCOUNTING
175
- */
172
+ //
173
+ // CONSTRUCTION/DESTRUCTION/REFCOUNTING
174
+ //
176
175
 
177
176
  grpc_chttp2_transport::~grpc_chttp2_transport() {
178
177
  size_t i;
@@ -226,12 +225,11 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
226
225
 
227
226
  GRPC_ERROR_UNREF(closed_with_error);
228
227
  gpr_free(ping_acks);
229
- gpr_free(peer_string);
230
228
  }
231
229
 
232
230
  static const grpc_transport_vtable* get_vtable(void);
233
231
 
234
- /* Returns whether bdp is enabled */
232
+ // Returns whether bdp is enabled
235
233
  static bool read_channel_args(grpc_chttp2_transport* t,
236
234
  const grpc_channel_args* channel_args,
237
235
  bool is_client) {
@@ -378,11 +376,9 @@ static bool read_channel_args(grpc_chttp2_transport* t,
378
376
  }
379
377
  }
380
378
  if (channelz_enabled) {
381
- // TODO(ncteisen): add an API to endpoint to query for local addr, and pass
382
- // it in here, so SocketNode knows its own address.
383
379
  t->channelz_socket =
384
380
  grpc_core::MakeRefCounted<grpc_core::channelz::SocketNode>(
385
- "", t->peer_string,
381
+ std::string(grpc_endpoint_get_local_address(t->ep)), t->peer_string,
386
382
  absl::StrFormat("%s %s", get_vtable()->name, t->peer_string));
387
383
  }
388
384
  return enable_bdp;
@@ -429,8 +425,8 @@ static void init_keepalive_pings_if_enabled(grpc_chttp2_transport* t) {
429
425
  grpc_core::ExecCtx::Get()->Now() + t->keepalive_time,
430
426
  &t->init_keepalive_ping_locked);
431
427
  } else {
432
- /* Use GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED to indicate there are no
433
- inflight keeaplive timers */
428
+ // Use GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED to indicate there are no
429
+ // inflight keeaplive timers
434
430
  t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED;
435
431
  }
436
432
  }
@@ -451,11 +447,11 @@ grpc_chttp2_transport::grpc_chttp2_transport(
451
447
  GPR_ASSERT(strlen(GRPC_CHTTP2_CLIENT_CONNECT_STRING) ==
452
448
  GRPC_CHTTP2_CLIENT_CONNECT_STRLEN);
453
449
  base.vtable = get_vtable();
454
- /* 8 is a random stab in the dark as to a good initial size: it's small enough
455
- that it shouldn't waste memory for infrequently used connections, yet
456
- large enough that the exponential growth should happen nicely when it's
457
- needed.
458
- TODO(ctiller): tune this */
450
+ // 8 is a random stab in the dark as to a good initial size: it's small enough
451
+ // that it shouldn't waste memory for infrequently used connections, yet
452
+ // large enough that the exponential growth should happen nicely when it's
453
+ // needed.
454
+ // TODO(ctiller): tune this
459
455
  grpc_chttp2_stream_map_init(&stream_map, 8);
460
456
 
461
457
  grpc_slice_buffer_init(&read_buffer);
@@ -466,7 +462,7 @@ grpc_chttp2_transport::grpc_chttp2_transport(
466
462
  }
467
463
  grpc_chttp2_hpack_compressor_init(&hpack_compressor);
468
464
  grpc_slice_buffer_init(&qbuf);
469
- /* copy in initial settings to all setting sets */
465
+ // copy in initial settings to all setting sets
470
466
  size_t i;
471
467
  int j;
472
468
  for (i = 0; i < GRPC_CHTTP2_NUM_SETTINGS; i++) {
@@ -477,7 +473,7 @@ grpc_chttp2_transport::grpc_chttp2_transport(
477
473
  grpc_chttp2_hpack_parser_init(&hpack_parser);
478
474
  grpc_chttp2_goaway_parser_init(&goaway_parser);
479
475
 
480
- /* configure http2 the way we like it */
476
+ // configure http2 the way we like it
481
477
  if (is_client) {
482
478
  queue_setting_update(this, GRPC_CHTTP2_SETTINGS_ENABLE_PUSH, 0);
483
479
  queue_setting_update(this, GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS, 0);
@@ -503,7 +499,7 @@ grpc_chttp2_transport::grpc_chttp2_transport(
503
499
  enable_bdp = false;
504
500
  }
505
501
 
506
- /* No pings allowed before receiving a header or data frame. */
502
+ // No pings allowed before receiving a header or data frame.
507
503
  ping_state.pings_before_data_required = 0;
508
504
  ping_state.is_delayed_ping_timer_set = false;
509
505
  ping_state.last_ping_sent_time = GRPC_MILLIS_INF_PAST;
@@ -514,8 +510,7 @@ grpc_chttp2_transport::grpc_chttp2_transport(
514
510
  init_keepalive_pings_if_enabled(this);
515
511
 
516
512
  if (enable_bdp) {
517
- GRPC_CHTTP2_REF_TRANSPORT(this, "bdp_ping");
518
- schedule_bdp_ping_locked(this);
513
+ bdp_ping_blocked = true;
519
514
  grpc_chttp2_act_on_flowctl_action(flow_control->PeriodicUpdate(), this,
520
515
  nullptr);
521
516
  }
@@ -562,7 +557,8 @@ static void close_transport_locked(grpc_chttp2_transport* t,
562
557
  }
563
558
  GPR_ASSERT(error != GRPC_ERROR_NONE);
564
559
  t->closed_with_error = GRPC_ERROR_REF(error);
565
- connectivity_state_set(t, GRPC_CHANNEL_SHUTDOWN, "close_transport");
560
+ connectivity_state_set(t, GRPC_CHANNEL_SHUTDOWN, absl::Status(),
561
+ "close_transport");
566
562
  if (t->ping_state.is_delayed_ping_timer_set) {
567
563
  grpc_timer_cancel(&t->ping_state.delayed_ping_timer);
568
564
  }
@@ -579,11 +575,11 @@ static void close_transport_locked(grpc_chttp2_transport* t,
579
575
  break;
580
576
  case GRPC_CHTTP2_KEEPALIVE_STATE_DYING:
581
577
  case GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED:
582
- /* keepalive timers are not set in these two states */
578
+ // keepalive timers are not set in these two states
583
579
  break;
584
580
  }
585
581
 
586
- /* flush writable stream list to avoid dangling references */
582
+ // flush writable stream list to avoid dangling references
587
583
  grpc_chttp2_stream* s;
588
584
  while (grpc_chttp2_list_pop_writable_stream(t, &s)) {
589
585
  GRPC_CHTTP2_STREAM_UNREF(s, "chttp2_writing:close");
@@ -593,7 +589,7 @@ static void close_transport_locked(grpc_chttp2_transport* t,
593
589
  }
594
590
  if (t->notify_on_receive_settings != nullptr) {
595
591
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, t->notify_on_receive_settings,
596
- GRPC_ERROR_CANCELLED);
592
+ GRPC_ERROR_REF(error));
597
593
  t->notify_on_receive_settings = nullptr;
598
594
  }
599
595
  GRPC_ERROR_UNREF(error);
@@ -616,9 +612,9 @@ void grpc_chttp2_stream_unref(grpc_chttp2_stream* s) {
616
612
  #endif
617
613
 
618
614
  grpc_chttp2_stream::Reffer::Reffer(grpc_chttp2_stream* s) {
619
- /* We reserve one 'active stream' that's dropped when the stream is
620
- read-closed. The others are for Chttp2IncomingByteStreams that are
621
- actively reading */
615
+ // We reserve one 'active stream' that's dropped when the stream is
616
+ // read-closed. The others are for Chttp2IncomingByteStreams that are
617
+ // actively reading
622
618
  GRPC_CHTTP2_STREAM_REF(s, "chttp2");
623
619
  GRPC_CHTTP2_REF_TRANSPORT(s->t, "stream");
624
620
  }
@@ -677,9 +673,6 @@ grpc_chttp2_stream::~grpc_chttp2_stream() {
677
673
  grpc_slice_buffer_destroy_internal(&decompressed_data_buffer);
678
674
  }
679
675
 
680
- grpc_chttp2_list_remove_stalled_by_transport(t, this);
681
- grpc_chttp2_list_remove_stalled_by_stream(t, this);
682
-
683
676
  for (int i = 0; i < STREAM_LIST_COUNT; i++) {
684
677
  if (GPR_UNLIKELY(included[i])) {
685
678
  gpr_log(GPR_ERROR, "%s stream %d still included in list %d",
@@ -774,9 +767,9 @@ grpc_chttp2_stream* grpc_chttp2_parsing_accept_stream(grpc_chttp2_transport* t,
774
767
  return accepting;
775
768
  }
776
769
 
777
- /*******************************************************************************
778
- * OUTPUT PROCESSING
779
- */
770
+ //
771
+ // OUTPUT PROCESSING
772
+ //
780
773
 
781
774
  static const char* write_state_name(grpc_chttp2_write_state st) {
782
775
  switch (st) {
@@ -794,15 +787,15 @@ static void set_write_state(grpc_chttp2_transport* t,
794
787
  grpc_chttp2_write_state st, const char* reason) {
795
788
  GRPC_CHTTP2_IF_TRACING(
796
789
  gpr_log(GPR_INFO, "W:%p %s [%s] state %s -> %s [%s]", t,
797
- t->is_client ? "CLIENT" : "SERVER", t->peer_string,
790
+ t->is_client ? "CLIENT" : "SERVER", t->peer_string.c_str(),
798
791
  write_state_name(t->write_state), write_state_name(st), reason));
799
792
  t->write_state = st;
800
- /* If the state is being reset back to idle, it means a write was just
801
- * finished. Make sure all the run_after_write closures are scheduled.
802
- *
803
- * This is also our chance to close the transport if the transport was marked
804
- * to be closed after all writes finish (for example, if we received a go-away
805
- * from peer while we had some pending writes) */
793
+ // If the state is being reset back to idle, it means a write was just
794
+ // finished. Make sure all the run_after_write closures are scheduled.
795
+ //
796
+ // This is also our chance to close the transport if the transport was marked
797
+ // to be closed after all writes finish (for example, if we received a go-away
798
+ // from peer while we had some pending writes)
806
799
  if (st == GRPC_CHTTP2_WRITE_STATE_IDLE) {
807
800
  grpc_core::ExecCtx::RunList(DEBUG_LOCATION, &t->run_after_write);
808
801
  if (t->close_transport_on_writes_finished != nullptr) {
@@ -864,6 +857,9 @@ static void inc_initiate_write_reason(
864
857
  case GRPC_CHTTP2_INITIATE_WRITE_APPLICATION_PING:
865
858
  GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_APPLICATION_PING();
866
859
  break;
860
+ case GRPC_CHTTP2_INITIATE_WRITE_BDP_PING:
861
+ GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_BDP_ESTIMATOR_PING();
862
+ break;
867
863
  case GRPC_CHTTP2_INITIATE_WRITE_KEEPALIVE_PING:
868
864
  GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_KEEPALIVE_PING();
869
865
  break;
@@ -889,22 +885,22 @@ void grpc_chttp2_initiate_write(grpc_chttp2_transport* t,
889
885
  set_write_state(t, GRPC_CHTTP2_WRITE_STATE_WRITING,
890
886
  grpc_chttp2_initiate_write_reason_string(reason));
891
887
  GRPC_CHTTP2_REF_TRANSPORT(t, "writing");
892
- /* Note that the 'write_action_begin_locked' closure is being scheduled
893
- * on the 'finally_scheduler' of t->combiner. This means that
894
- * 'write_action_begin_locked' is called only *after* all the other
895
- * closures (some of which are potentially initiating more writes on the
896
- * transport) are executed on the t->combiner.
897
- *
898
- * The reason for scheduling on finally_scheduler is to make sure we batch
899
- * as many writes as possible. 'write_action_begin_locked' is the function
900
- * that gathers all the relevant bytes (which are at various places in the
901
- * grpc_chttp2_transport structure) and append them to 'outbuf' field in
902
- * grpc_chttp2_transport thereby batching what would have been potentially
903
- * multiple write operations.
904
- *
905
- * Also, 'write_action_begin_locked' only gathers the bytes into outbuf.
906
- * It does not call the endpoint to write the bytes. That is done by the
907
- * 'write_action' (which is scheduled by 'write_action_begin_locked') */
888
+ // Note that the 'write_action_begin_locked' closure is being scheduled
889
+ // on the 'finally_scheduler' of t->combiner. This means that
890
+ // 'write_action_begin_locked' is called only *after* all the other
891
+ // closures (some of which are potentially initiating more writes on the
892
+ // transport) are executed on the t->combiner.
893
+ //
894
+ // The reason for scheduling on finally_scheduler is to make sure we batch
895
+ // as many writes as possible. 'write_action_begin_locked' is the function
896
+ // that gathers all the relevant bytes (which are at various places in the
897
+ // grpc_chttp2_transport structure) and append them to 'outbuf' field in
898
+ // grpc_chttp2_transport thereby batching what would have been potentially
899
+ // multiple write operations.
900
+ //
901
+ // Also, 'write_action_begin_locked' only gathers the bytes into outbuf.
902
+ // It does not call the endpoint to write the bytes. That is done by the
903
+ // 'write_action' (which is scheduled by 'write_action_begin_locked')
908
904
  t->combiner->FinallyRun(
909
905
  GRPC_CLOSURE_INIT(&t->write_action_begin_locked,
910
906
  write_action_begin_locked, t, nullptr),
@@ -956,9 +952,9 @@ static void write_action_begin_locked(void* gt, grpc_error* /*error_ignored*/) {
956
952
  write_action(t, GRPC_ERROR_NONE);
957
953
  if (t->reading_paused_on_pending_induced_frames) {
958
954
  GPR_ASSERT(t->num_pending_induced_frames == 0);
959
- /* We had paused reading, because we had many induced frames (SETTINGS
960
- * ACK, PINGS ACK and RST_STREAMS) pending in t->qbuf. Now that we have
961
- * been able to flush qbuf, we can resume reading. */
955
+ // We had paused reading, because we had many induced frames (SETTINGS
956
+ // ACK, PINGS ACK and RST_STREAMS) pending in t->qbuf. Now that we have
957
+ // been able to flush qbuf, we can resume reading.
962
958
  GRPC_CHTTP2_IF_TRACING(gpr_log(
963
959
  GPR_INFO,
964
960
  "transport %p : Resuming reading after being paused due to too "
@@ -993,8 +989,8 @@ static void write_action_end(void* tp, grpc_error* error) {
993
989
  GRPC_ERROR_REF(error));
994
990
  }
995
991
 
996
- /* Callback from the grpc_endpoint after bytes have been written by calling
997
- * sendmsg */
992
+ // Callback from the grpc_endpoint after bytes have been written by calling
993
+ // sendmsg
998
994
  static void write_action_end_locked(void* tp, grpc_error* error) {
999
995
  GPR_TIMER_SCOPE("terminate_writing_with_lock", 0);
1000
996
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
@@ -1080,16 +1076,17 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
1080
1076
  GRPC_CHTTP2_IF_TRACING(
1081
1077
  gpr_log(GPR_INFO, "transport %p got goaway with last stream id %d", t,
1082
1078
  last_stream_id));
1083
- /* We want to log this irrespective of whether http tracing is enabled if we
1084
- * received a GOAWAY with a non NO_ERROR code. */
1079
+ // We want to log this irrespective of whether http tracing is enabled if we
1080
+ // received a GOAWAY with a non NO_ERROR code.
1085
1081
  if (goaway_error != GRPC_HTTP2_NO_ERROR) {
1086
- gpr_log(GPR_INFO, "%s: Got goaway [%d] err=%s", t->peer_string,
1082
+ gpr_log(GPR_INFO, "%s: Got goaway [%d] err=%s", t->peer_string.c_str(),
1087
1083
  goaway_error, grpc_error_string(t->goaway_error));
1088
1084
  }
1089
- /* When a client receives a GOAWAY with error code ENHANCE_YOUR_CALM and debug
1090
- * data equal to "too_many_pings", it should log the occurrence at a log level
1091
- * that is enabled by default and double the configured KEEPALIVE_TIME used
1092
- * for new connections on that channel. */
1085
+ absl::Status status = grpc_error_to_absl_status(t->goaway_error);
1086
+ // When a client receives a GOAWAY with error code ENHANCE_YOUR_CALM and debug
1087
+ // data equal to "too_many_pings", it should log the occurrence at a log level
1088
+ // that is enabled by default and double the configured KEEPALIVE_TIME used
1089
+ // for new connections on that channel.
1093
1090
  if (GPR_UNLIKELY(t->is_client &&
1094
1091
  goaway_error == GRPC_HTTP2_ENHANCE_YOUR_CALM &&
1095
1092
  grpc_slice_str_cmp(goaway_text, "too_many_pings") == 0)) {
@@ -1104,15 +1101,18 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
1104
1101
  ? GRPC_MILLIS_INF_FUTURE
1105
1102
  : static_cast<grpc_millis>(current_keepalive_time_ms *
1106
1103
  KEEPALIVE_TIME_BACKOFF_MULTIPLIER);
1104
+ status.SetPayload(grpc_core::kKeepaliveThrottlingKey,
1105
+ absl::Cord(std::to_string(t->keepalive_time)));
1107
1106
  }
1108
- /* lie: use transient failure from the transport to indicate goaway has been
1109
- * received */
1110
- connectivity_state_set(t, GRPC_CHANNEL_TRANSIENT_FAILURE, "got_goaway");
1107
+ // lie: use transient failure from the transport to indicate goaway has been
1108
+ // received.
1109
+ connectivity_state_set(t, GRPC_CHANNEL_TRANSIENT_FAILURE, status,
1110
+ "got_goaway");
1111
1111
  }
1112
1112
 
1113
1113
  static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1114
1114
  grpc_chttp2_stream* s;
1115
- /* cancel out streams that haven't yet started if we have received a GOAWAY */
1115
+ // cancel out streams that haven't yet started if we have received a GOAWAY
1116
1116
  if (t->goaway_error != GRPC_ERROR_NONE) {
1117
1117
  while (grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
1118
1118
  grpc_chttp2_cancel_stream(
@@ -1123,14 +1123,14 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1123
1123
  }
1124
1124
  return;
1125
1125
  }
1126
- /* start streams where we have free grpc_chttp2_stream ids and free
1127
- * concurrency */
1126
+ // start streams where we have free grpc_chttp2_stream ids and free
1127
+ // * concurrency
1128
1128
  while (t->next_stream_id <= MAX_CLIENT_STREAM_ID &&
1129
1129
  grpc_chttp2_stream_map_size(&t->stream_map) <
1130
1130
  t->settings[GRPC_PEER_SETTINGS]
1131
1131
  [GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS] &&
1132
1132
  grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
1133
- /* safe since we can't (legally) be parsing this stream yet */
1133
+ // safe since we can't (legally) be parsing this stream yet
1134
1134
  GRPC_CHTTP2_IF_TRACING(gpr_log(
1135
1135
  GPR_INFO,
1136
1136
  "HTTP:%s: Transport %p allocating new grpc_chttp2_stream %p to id %d",
@@ -1142,6 +1142,8 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1142
1142
 
1143
1143
  if (t->next_stream_id >= MAX_CLIENT_STREAM_ID) {
1144
1144
  connectivity_state_set(t, GRPC_CHANNEL_TRANSIENT_FAILURE,
1145
+ absl::Status(absl::StatusCode::kUnavailable,
1146
+ "Transport Stream IDs exhausted"),
1145
1147
  "no_more_stream_ids");
1146
1148
  }
1147
1149
 
@@ -1150,7 +1152,7 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1150
1152
  grpc_chttp2_mark_stream_writable(t, s);
1151
1153
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_START_NEW_STREAM);
1152
1154
  }
1153
- /* cancel out streams that will never be started */
1155
+ // cancel out streams that will never be started
1154
1156
  if (t->next_stream_id >= MAX_CLIENT_STREAM_ID) {
1155
1157
  while (grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
1156
1158
  grpc_chttp2_cancel_stream(
@@ -1162,12 +1164,12 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1162
1164
  }
1163
1165
  }
1164
1166
 
1165
- /* Flag that this closure barrier may be covering a write in a pollset, and so
1166
- we should not complete this closure until we can prove that the write got
1167
- scheduled */
1167
+ // Flag that this closure barrier may be covering a write in a pollset, and so
1168
+ // we should not complete this closure until we can prove that the write got
1169
+ // scheduled
1168
1170
  #define CLOSURE_BARRIER_MAY_COVER_WRITE (1 << 0)
1169
- /* First bit of the reference count, stored in the high order bits (with the low
1170
- bits being used for flags defined above) */
1171
+ // First bit of the reference count, stored in the high order bits (with the low
1172
+ // bits being used for flags defined above)
1171
1173
  #define CLOSURE_BARRIER_FIRST_REF_BIT (1 << 16)
1172
1174
 
1173
1175
  static grpc_closure* add_closure_barrier(grpc_closure* closure) {
@@ -1211,7 +1213,7 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
1211
1213
  "Error in HTTP transport completing operation");
1212
1214
  closure->error_data.error = grpc_error_set_str(
1213
1215
  closure->error_data.error, GRPC_ERROR_STR_TARGET_ADDRESS,
1214
- grpc_slice_from_copied_string(t->peer_string));
1216
+ grpc_slice_from_copied_string(t->peer_string.c_str()));
1215
1217
  }
1216
1218
  closure->error_data.error =
1217
1219
  grpc_error_add_child(closure->error_data.error, error);
@@ -1259,7 +1261,7 @@ static void continue_fetching_send_locked(grpc_chttp2_transport* t,
1259
1261
  grpc_chttp2_stream* s) {
1260
1262
  for (;;) {
1261
1263
  if (s->fetching_send_message == nullptr) {
1262
- /* Stream was cancelled before message fetch completed */
1264
+ // Stream was cancelled before message fetch completed
1263
1265
  abort(); /* TODO(ctiller): what cleanup here? */
1264
1266
  return; /* early out */
1265
1267
  }
@@ -1389,7 +1391,7 @@ static void perform_stream_op_locked(void* stream_op,
1389
1391
  GPR_ASSERT(s->send_initial_metadata_finished == nullptr);
1390
1392
  on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
1391
1393
 
1392
- /* Identify stream compression */
1394
+ // Identify stream compression
1393
1395
  if (op_payload->send_initial_metadata.send_initial_metadata->idx.named
1394
1396
  .content_encoding == nullptr ||
1395
1397
  grpc_stream_compression_method_parse(
@@ -1408,68 +1410,48 @@ static void perform_stream_op_locked(void* stream_op,
1408
1410
  s->send_initial_metadata_finished = add_closure_barrier(on_complete);
1409
1411
  s->send_initial_metadata =
1410
1412
  op_payload->send_initial_metadata.send_initial_metadata;
1411
- const size_t metadata_size =
1412
- grpc_metadata_batch_size(s->send_initial_metadata);
1413
- const size_t metadata_peer_limit =
1414
- t->settings[GRPC_PEER_SETTINGS]
1415
- [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE];
1416
1413
  if (t->is_client) {
1417
1414
  s->deadline = GPR_MIN(s->deadline, s->send_initial_metadata->deadline);
1418
1415
  }
1419
- if (metadata_size > metadata_peer_limit) {
1420
- grpc_chttp2_cancel_stream(
1421
- t, s,
1422
- grpc_error_set_int(
1423
- grpc_error_set_int(
1424
- grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1425
- "to-be-sent initial metadata size "
1426
- "exceeds peer limit"),
1427
- GRPC_ERROR_INT_SIZE,
1428
- static_cast<intptr_t>(metadata_size)),
1429
- GRPC_ERROR_INT_LIMIT,
1430
- static_cast<intptr_t>(metadata_peer_limit)),
1431
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED));
1432
- } else {
1433
- if (contains_non_ok_status(s->send_initial_metadata)) {
1434
- s->seen_error = true;
1435
- }
1436
- if (!s->write_closed) {
1437
- if (t->is_client) {
1438
- if (t->closed_with_error == GRPC_ERROR_NONE) {
1439
- GPR_ASSERT(s->id == 0);
1440
- grpc_chttp2_list_add_waiting_for_concurrency(t, s);
1441
- maybe_start_some_streams(t);
1442
- } else {
1443
- grpc_chttp2_cancel_stream(
1444
- t, s,
1445
- grpc_error_set_int(
1446
- GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
1447
- "Transport closed", &t->closed_with_error, 1),
1448
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
1449
- }
1416
+ if (contains_non_ok_status(s->send_initial_metadata)) {
1417
+ s->seen_error = true;
1418
+ }
1419
+ if (!s->write_closed) {
1420
+ if (t->is_client) {
1421
+ if (t->closed_with_error == GRPC_ERROR_NONE) {
1422
+ GPR_ASSERT(s->id == 0);
1423
+ grpc_chttp2_list_add_waiting_for_concurrency(t, s);
1424
+ maybe_start_some_streams(t);
1450
1425
  } else {
1451
- GPR_ASSERT(s->id != 0);
1452
- grpc_chttp2_mark_stream_writable(t, s);
1453
- if (!(op->send_message &&
1454
- (op->payload->send_message.send_message->flags() &
1455
- GRPC_WRITE_BUFFER_HINT))) {
1456
- grpc_chttp2_initiate_write(
1457
- t, GRPC_CHTTP2_INITIATE_WRITE_SEND_INITIAL_METADATA);
1458
- }
1426
+ grpc_chttp2_cancel_stream(
1427
+ t, s,
1428
+ grpc_error_set_int(
1429
+ GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
1430
+ "Transport closed", &t->closed_with_error, 1),
1431
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
1459
1432
  }
1460
1433
  } else {
1461
- s->send_initial_metadata = nullptr;
1462
- grpc_chttp2_complete_closure_step(
1463
- t, s, &s->send_initial_metadata_finished,
1464
- GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
1465
- "Attempt to send initial metadata after stream was closed",
1466
- &s->write_closed_error, 1),
1467
- "send_initial_metadata_finished");
1434
+ GPR_ASSERT(s->id != 0);
1435
+ grpc_chttp2_mark_stream_writable(t, s);
1436
+ if (!(op->send_message &&
1437
+ (op->payload->send_message.send_message->flags() &
1438
+ GRPC_WRITE_BUFFER_HINT))) {
1439
+ grpc_chttp2_initiate_write(
1440
+ t, GRPC_CHTTP2_INITIATE_WRITE_SEND_INITIAL_METADATA);
1441
+ }
1468
1442
  }
1443
+ } else {
1444
+ s->send_initial_metadata = nullptr;
1445
+ grpc_chttp2_complete_closure_step(
1446
+ t, s, &s->send_initial_metadata_finished,
1447
+ GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
1448
+ "Attempt to send initial metadata after stream was closed",
1449
+ &s->write_closed_error, 1),
1450
+ "send_initial_metadata_finished");
1469
1451
  }
1470
1452
  if (op_payload->send_initial_metadata.peer_string != nullptr) {
1471
1453
  gpr_atm_rel_store(op_payload->send_initial_metadata.peer_string,
1472
- (gpr_atm)t->peer_string);
1454
+ (gpr_atm)t->peer_string.c_str());
1473
1455
  }
1474
1456
  }
1475
1457
 
@@ -1527,47 +1509,27 @@ static void perform_stream_op_locked(void* stream_op,
1527
1509
  op_payload->send_trailing_metadata.send_trailing_metadata;
1528
1510
  s->sent_trailing_metadata_op = op_payload->send_trailing_metadata.sent;
1529
1511
  s->write_buffering = false;
1530
- const size_t metadata_size =
1531
- grpc_metadata_batch_size(s->send_trailing_metadata);
1532
- const size_t metadata_peer_limit =
1533
- t->settings[GRPC_PEER_SETTINGS]
1534
- [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE];
1535
- if (metadata_size > metadata_peer_limit) {
1536
- grpc_chttp2_cancel_stream(
1537
- t, s,
1538
- grpc_error_set_int(
1539
- grpc_error_set_int(
1540
- grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1541
- "to-be-sent trailing metadata size "
1542
- "exceeds peer limit"),
1543
- GRPC_ERROR_INT_SIZE,
1544
- static_cast<intptr_t>(metadata_size)),
1545
- GRPC_ERROR_INT_LIMIT,
1546
- static_cast<intptr_t>(metadata_peer_limit)),
1547
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED));
1548
- } else {
1549
- if (contains_non_ok_status(s->send_trailing_metadata)) {
1550
- s->seen_error = true;
1551
- }
1552
- if (s->write_closed) {
1553
- s->send_trailing_metadata = nullptr;
1554
- s->sent_trailing_metadata_op = nullptr;
1555
- grpc_chttp2_complete_closure_step(
1556
- t, s, &s->send_trailing_metadata_finished,
1557
- grpc_metadata_batch_is_empty(
1558
- op->payload->send_trailing_metadata.send_trailing_metadata)
1559
- ? GRPC_ERROR_NONE
1560
- : GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1561
- "Attempt to send trailing metadata after "
1562
- "stream was closed"),
1563
- "send_trailing_metadata_finished");
1564
- } else if (s->id != 0) {
1565
- /* TODO(ctiller): check if there's flow control for any outstanding
1566
- bytes before going writable */
1567
- grpc_chttp2_mark_stream_writable(t, s);
1568
- grpc_chttp2_initiate_write(
1569
- t, GRPC_CHTTP2_INITIATE_WRITE_SEND_TRAILING_METADATA);
1570
- }
1512
+ if (contains_non_ok_status(s->send_trailing_metadata)) {
1513
+ s->seen_error = true;
1514
+ }
1515
+ if (s->write_closed) {
1516
+ s->send_trailing_metadata = nullptr;
1517
+ s->sent_trailing_metadata_op = nullptr;
1518
+ grpc_chttp2_complete_closure_step(
1519
+ t, s, &s->send_trailing_metadata_finished,
1520
+ grpc_metadata_batch_is_empty(
1521
+ op->payload->send_trailing_metadata.send_trailing_metadata)
1522
+ ? GRPC_ERROR_NONE
1523
+ : GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1524
+ "Attempt to send trailing metadata after "
1525
+ "stream was closed"),
1526
+ "send_trailing_metadata_finished");
1527
+ } else if (s->id != 0) {
1528
+ // TODO(ctiller): check if there's flow control for any outstanding
1529
+ // bytes before going writable
1530
+ grpc_chttp2_mark_stream_writable(t, s);
1531
+ grpc_chttp2_initiate_write(
1532
+ t, GRPC_CHTTP2_INITIATE_WRITE_SEND_TRAILING_METADATA);
1571
1533
  }
1572
1534
  }
1573
1535
 
@@ -1582,7 +1544,7 @@ static void perform_stream_op_locked(void* stream_op,
1582
1544
  op_payload->recv_initial_metadata.trailing_metadata_available;
1583
1545
  if (op_payload->recv_initial_metadata.peer_string != nullptr) {
1584
1546
  gpr_atm_rel_store(op_payload->recv_initial_metadata.peer_string,
1585
- (gpr_atm)t->peer_string);
1547
+ (gpr_atm)t->peer_string.c_str());
1586
1548
  }
1587
1549
  grpc_chttp2_maybe_complete_recv_initial_metadata(t, s);
1588
1550
  }
@@ -1665,8 +1627,8 @@ static void perform_stream_op(grpc_transport* gt, grpc_stream* gs,
1665
1627
  }
1666
1628
 
1667
1629
  static void cancel_pings(grpc_chttp2_transport* t, grpc_error* error) {
1668
- /* callback remaining pings: they're not allowed to call into the transport,
1669
- and maybe they hold resources that need to be freed */
1630
+ // callback remaining pings: they're not allowed to call into the transport,
1631
+ // and maybe they hold resources that need to be freed
1670
1632
  grpc_chttp2_ping_queue* pq = &t->ping_queue;
1671
1633
  GPR_ASSERT(error != GRPC_ERROR_NONE);
1672
1634
  for (size_t j = 0; j < GRPC_CHTTP2_PCL_COUNT; j++) {
@@ -1692,11 +1654,9 @@ static void send_ping_locked(grpc_chttp2_transport* t,
1692
1654
  GRPC_ERROR_NONE);
1693
1655
  }
1694
1656
 
1695
- /*
1696
- * Specialized form of send_ping_locked for keepalive ping. If there is already
1697
- * a ping in progress, the keepalive ping would piggyback onto that ping,
1698
- * instead of waiting for that ping to complete and then starting a new ping.
1699
- */
1657
+ // Specialized form of send_ping_locked for keepalive ping. If there is already
1658
+ // a ping in progress, the keepalive ping would piggyback onto that ping,
1659
+ // instead of waiting for that ping to complete and then starting a new ping.
1700
1660
  static void send_keepalive_ping_locked(grpc_chttp2_transport* t) {
1701
1661
  if (t->closed_with_error != GRPC_ERROR_NONE) {
1702
1662
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
@@ -1710,7 +1670,7 @@ static void send_keepalive_ping_locked(grpc_chttp2_transport* t) {
1710
1670
  }
1711
1671
  grpc_chttp2_ping_queue* pq = &t->ping_queue;
1712
1672
  if (!grpc_closure_list_empty(pq->lists[GRPC_CHTTP2_PCL_INFLIGHT])) {
1713
- /* There is a ping in flight. Add yourself to the inflight closure list. */
1673
+ // There is a ping in flight. Add yourself to the inflight closure list.
1714
1674
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
1715
1675
  start_keepalive_ping_locked, t, nullptr),
1716
1676
  GRPC_ERROR_REF(t->closed_with_error));
@@ -1752,9 +1712,8 @@ static void retry_initiate_ping_locked(void* tp, grpc_error* error) {
1752
1712
  void grpc_chttp2_ack_ping(grpc_chttp2_transport* t, uint64_t id) {
1753
1713
  grpc_chttp2_ping_queue* pq = &t->ping_queue;
1754
1714
  if (pq->inflight_id != id) {
1755
- char* from = grpc_endpoint_get_peer(t->ep);
1756
- gpr_log(GPR_DEBUG, "Unknown ping response from %s: %" PRIx64, from, id);
1757
- gpr_free(from);
1715
+ gpr_log(GPR_DEBUG, "Unknown ping response from %s: %" PRIx64,
1716
+ t->peer_string.c_str(), id);
1758
1717
  return;
1759
1718
  }
1760
1719
  grpc_core::ExecCtx::RunList(DEBUG_LOCATION,
@@ -1765,8 +1724,8 @@ void grpc_chttp2_ack_ping(grpc_chttp2_transport* t, uint64_t id) {
1765
1724
  }
1766
1725
 
1767
1726
  static void send_goaway(grpc_chttp2_transport* t, grpc_error* error) {
1768
- /* We want to log this irrespective of whether http tracing is enabled */
1769
- gpr_log(GPR_INFO, "%s: Sending goaway err=%s", t->peer_string,
1727
+ // We want to log this irrespective of whether http tracing is enabled
1728
+ gpr_log(GPR_INFO, "%s: Sending goaway err=%s", t->peer_string.c_str(),
1770
1729
  grpc_error_string(error));
1771
1730
  t->sent_goaway_state = GRPC_CHTTP2_GOAWAY_SEND_SCHEDULED;
1772
1731
  grpc_http2_error_code http_error;
@@ -1787,7 +1746,7 @@ void grpc_chttp2_add_ping_strike(grpc_chttp2_transport* t) {
1787
1746
  grpc_error_set_int(
1788
1747
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("too_many_pings"),
1789
1748
  GRPC_ERROR_INT_HTTP2_ERROR, GRPC_HTTP2_ENHANCE_YOUR_CALM));
1790
- /*The transport will be closed after the write is done */
1749
+ // The transport will be closed after the write is done
1791
1750
  close_transport_locked(
1792
1751
  t, grpc_error_set_int(
1793
1752
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Too many pings"),
@@ -1862,9 +1821,9 @@ static void perform_transport_op(grpc_transport* gt, grpc_transport_op* op) {
1862
1821
  GRPC_ERROR_NONE);
1863
1822
  }
1864
1823
 
1865
- /*******************************************************************************
1866
- * INPUT PROCESSING - GENERAL
1867
- */
1824
+ //
1825
+ // INPUT PROCESSING - GENERAL
1826
+ //
1868
1827
 
1869
1828
  void grpc_chttp2_maybe_complete_recv_initial_metadata(
1870
1829
  grpc_chttp2_transport* /*t*/, grpc_chttp2_stream* s) {
@@ -1984,8 +1943,8 @@ void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_chttp2_transport* t,
1984
1943
  s->unprocessed_incoming_frames_buffer.length > 0;
1985
1944
  if (s->read_closed && s->frame_storage.length > 0 && !pending_data &&
1986
1945
  !s->seen_error && s->recv_trailing_metadata_finished != nullptr) {
1987
- /* Maybe some SYNC_FLUSH data is left in frame_storage. Consume them and
1988
- * maybe decompress the next 5 bytes in the stream. */
1946
+ // Maybe some SYNC_FLUSH data is left in frame_storage. Consume them and
1947
+ // maybe decompress the next 5 bytes in the stream.
1989
1948
  if (s->stream_decompression_method ==
1990
1949
  GRPC_STREAM_COMPRESSION_IDENTITY_DECOMPRESS) {
1991
1950
  grpc_slice_buffer_move_first(
@@ -2069,6 +2028,8 @@ static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
2069
2028
  if (grpc_chttp2_list_remove_writable_stream(t, s)) {
2070
2029
  GRPC_CHTTP2_STREAM_UNREF(s, "chttp2_writing:remove_stream");
2071
2030
  }
2031
+ grpc_chttp2_list_remove_stalled_by_stream(t, s);
2032
+ grpc_chttp2_list_remove_stalled_by_transport(t, s);
2072
2033
 
2073
2034
  GRPC_ERROR_UNREF(error);
2074
2035
 
@@ -2107,12 +2068,12 @@ void grpc_chttp2_fake_status(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2107
2068
  if (status != GRPC_STATUS_OK) {
2108
2069
  s->seen_error = true;
2109
2070
  }
2110
- /* stream_global->recv_trailing_metadata_finished gives us a
2111
- last chance replacement: we've received trailing metadata,
2112
- but something more important has become available to signal
2113
- to the upper layers - drop what we've got, and then publish
2114
- what we want - which is safe because we haven't told anyone
2115
- about the metadata yet */
2071
+ // stream_global->recv_trailing_metadata_finished gives us a
2072
+ // last chance replacement: we've received trailing metadata,
2073
+ // but something more important has become available to signal
2074
+ // to the upper layers - drop what we've got, and then publish
2075
+ // what we want - which is safe because we haven't told anyone
2076
+ // about the metadata yet
2116
2077
  if (s->published_metadata[1] == GRPC_METADATA_NOT_PUBLISHED ||
2117
2078
  s->recv_trailing_metadata_finished != nullptr) {
2118
2079
  char status_string[GPR_LTOA_MIN_BUFSIZE];
@@ -2204,7 +2165,7 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
2204
2165
  grpc_chttp2_stream* s, int close_reads,
2205
2166
  int close_writes, grpc_error* error) {
2206
2167
  if (s->read_closed && s->write_closed) {
2207
- /* already closed, but we should still fake the status if needed. */
2168
+ // already closed, but we should still fake the status if needed.
2208
2169
  grpc_error* overall_error = removal_error(error, s, "Stream removed");
2209
2170
  if (overall_error != GRPC_ERROR_NONE) {
2210
2171
  grpc_chttp2_fake_status(t, s, overall_error);
@@ -2231,7 +2192,7 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
2231
2192
  if (s->id != 0) {
2232
2193
  remove_stream(t, s->id, GRPC_ERROR_REF(overall_error));
2233
2194
  } else {
2234
- /* Purge streams waiting on concurrency still waiting for id assignment */
2195
+ // Purge streams waiting on concurrency still waiting for id assignment
2235
2196
  grpc_chttp2_list_remove_waiting_for_concurrency(t, s);
2236
2197
  }
2237
2198
  if (overall_error != GRPC_ERROR_NONE) {
@@ -2270,12 +2231,12 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2270
2231
 
2271
2232
  GPR_ASSERT(grpc_status >= 0 && (int)grpc_status < 100);
2272
2233
 
2273
- /* Hand roll a header block.
2274
- This is unnecessarily ugly - at some point we should find a more
2275
- elegant solution.
2276
- It's complicated by the fact that our send machinery would be dead by
2277
- the time we got around to sending this, so instead we ignore HPACK
2278
- compression and just write the uncompressed bytes onto the wire. */
2234
+ // Hand roll a header block.
2235
+ // This is unnecessarily ugly - at some point we should find a more
2236
+ // elegant solution.
2237
+ // It's complicated by the fact that our send machinery would be dead by
2238
+ // the time we got around to sending this, so instead we ignore HPACK
2239
+ // compression and just write the uncompressed bytes onto the wire.
2279
2240
  if (!s->sent_initial_metadata) {
2280
2241
  http_status_hdr = GRPC_SLICE_MALLOC(13);
2281
2242
  p = GRPC_SLICE_START_PTR(http_status_hdr);
@@ -2436,9 +2397,9 @@ static void end_all_the_calls(grpc_chttp2_transport* t, grpc_error* error) {
2436
2397
  GRPC_ERROR_UNREF(error);
2437
2398
  }
2438
2399
 
2439
- /*******************************************************************************
2440
- * INPUT PROCESSING - PARSING
2441
- */
2400
+ //
2401
+ // INPUT PROCESSING - PARSING
2402
+ //
2442
2403
 
2443
2404
  template <class F>
2444
2405
  static void WithUrgency(grpc_chttp2_transport* t,
@@ -2535,11 +2496,6 @@ static void read_action_locked(void* tp, grpc_error* error) {
2535
2496
  grpc_error* errors[3] = {GRPC_ERROR_REF(error), GRPC_ERROR_NONE,
2536
2497
  GRPC_ERROR_NONE};
2537
2498
  for (; i < t->read_buffer.count && errors[1] == GRPC_ERROR_NONE; i++) {
2538
- grpc_core::BdpEstimator* bdp_est = t->flow_control->bdp_estimator();
2539
- if (bdp_est) {
2540
- bdp_est->AddIncomingBytes(
2541
- static_cast<int64_t> GRPC_SLICE_LENGTH(t->read_buffer.slices[i]));
2542
- }
2543
2499
  errors[1] = grpc_chttp2_perform_read(t, t->read_buffer.slices[i]);
2544
2500
  }
2545
2501
  if (errors[1] != GRPC_ERROR_NONE) {
@@ -2573,8 +2529,8 @@ static void read_action_locked(void* tp, grpc_error* error) {
2573
2529
  "Transport closed", &t->closed_with_error, 1);
2574
2530
  }
2575
2531
  if (error != GRPC_ERROR_NONE) {
2576
- /* If a goaway frame was received, this might be the reason why the read
2577
- * failed. Add this info to the error */
2532
+ // If a goaway frame was received, this might be the reason why the read
2533
+ // failed. Add this info to the error
2578
2534
  if (t->goaway_error != GRPC_ERROR_NONE) {
2579
2535
  error = grpc_error_add_child(error, GRPC_ERROR_REF(t->goaway_error));
2580
2536
  }
@@ -2583,7 +2539,7 @@ static void read_action_locked(void* tp, grpc_error* error) {
2583
2539
  t->endpoint_reading = 0;
2584
2540
  } else if (t->closed_with_error == GRPC_ERROR_NONE) {
2585
2541
  keep_reading = true;
2586
- /* Since we have read a byte, reset the keepalive timer */
2542
+ // Since we have read a byte, reset the keepalive timer
2587
2543
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
2588
2544
  grpc_timer_cancel(&t->keepalive_ping_timer);
2589
2545
  }
@@ -2618,7 +2574,7 @@ static void continue_read_action_locked(grpc_chttp2_transport* t) {
2618
2574
 
2619
2575
  // t is reffed prior to calling the first time, and once the callback chain
2620
2576
  // that kicks off finishes, it's unreffed
2621
- static void schedule_bdp_ping_locked(grpc_chttp2_transport* t) {
2577
+ void schedule_bdp_ping_locked(grpc_chttp2_transport* t) {
2622
2578
  t->flow_control->bdp_estimator()->SchedulePing();
2623
2579
  send_ping_locked(
2624
2580
  t,
@@ -2626,6 +2582,9 @@ static void schedule_bdp_ping_locked(grpc_chttp2_transport* t) {
2626
2582
  grpc_schedule_on_exec_ctx),
2627
2583
  GRPC_CLOSURE_INIT(&t->finish_bdp_ping_locked, finish_bdp_ping, t,
2628
2584
  grpc_schedule_on_exec_ctx));
2585
+ // TODO(yashykt): Enabling this causes internal b/168345569. Re-enable once
2586
+ // fixed.
2587
+ // grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_BDP_PING);
2629
2588
  }
2630
2589
 
2631
2590
  static void start_bdp_ping(void* tp, grpc_error* error) {
@@ -2638,13 +2597,13 @@ static void start_bdp_ping(void* tp, grpc_error* error) {
2638
2597
  static void start_bdp_ping_locked(void* tp, grpc_error* error) {
2639
2598
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2640
2599
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
2641
- gpr_log(GPR_INFO, "%s: Start BDP ping err=%s", t->peer_string,
2600
+ gpr_log(GPR_INFO, "%s: Start BDP ping err=%s", t->peer_string.c_str(),
2642
2601
  grpc_error_string(error));
2643
2602
  }
2644
2603
  if (error != GRPC_ERROR_NONE || t->closed_with_error != GRPC_ERROR_NONE) {
2645
2604
  return;
2646
2605
  }
2647
- /* Reset the keepalive ping timer */
2606
+ // Reset the keepalive ping timer
2648
2607
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
2649
2608
  grpc_timer_cancel(&t->keepalive_ping_timer);
2650
2609
  }
@@ -2662,7 +2621,7 @@ static void finish_bdp_ping(void* tp, grpc_error* error) {
2662
2621
  static void finish_bdp_ping_locked(void* tp, grpc_error* error) {
2663
2622
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2664
2623
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
2665
- gpr_log(GPR_INFO, "%s: Complete BDP ping err=%s", t->peer_string,
2624
+ gpr_log(GPR_INFO, "%s: Complete BDP ping err=%s", t->peer_string.c_str(),
2666
2625
  grpc_error_string(error));
2667
2626
  }
2668
2627
  if (error != GRPC_ERROR_NONE || t->closed_with_error != GRPC_ERROR_NONE) {
@@ -2670,8 +2629,8 @@ static void finish_bdp_ping_locked(void* tp, grpc_error* error) {
2670
2629
  return;
2671
2630
  }
2672
2631
  if (!t->bdp_ping_started) {
2673
- /* start_bdp_ping_locked has not been run yet. Schedule
2674
- * finish_bdp_ping_locked to be run later. */
2632
+ // start_bdp_ping_locked has not been run yet. Schedule
2633
+ // finish_bdp_ping_locked to be run later.
2675
2634
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->finish_bdp_ping_locked,
2676
2635
  finish_bdp_ping_locked, t, nullptr),
2677
2636
  GRPC_ERROR_REF(error));
@@ -2705,7 +2664,13 @@ static void next_bdp_ping_timer_expired_locked(void* tp, grpc_error* error) {
2705
2664
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
2706
2665
  return;
2707
2666
  }
2708
- schedule_bdp_ping_locked(t);
2667
+ if (t->flow_control->bdp_estimator()->accumulator() == 0) {
2668
+ // Block the bdp ping till we receive more data.
2669
+ t->bdp_ping_blocked = true;
2670
+ GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
2671
+ } else {
2672
+ schedule_bdp_ping_locked(t);
2673
+ }
2709
2674
  }
2710
2675
 
2711
2676
  void grpc_chttp2_config_default_keepalive_args(grpc_channel_args* args,
@@ -2804,7 +2769,7 @@ static void init_keepalive_ping_locked(void* arg, grpc_error* error) {
2804
2769
  &t->init_keepalive_ping_locked);
2805
2770
  }
2806
2771
  } else if (error == GRPC_ERROR_CANCELLED) {
2807
- /* The keepalive ping timer may be cancelled by bdp */
2772
+ // The keepalive ping timer may be cancelled by bdp
2808
2773
  GRPC_CHTTP2_REF_TRANSPORT(t, "init keepalive ping");
2809
2774
  GRPC_CLOSURE_INIT(&t->init_keepalive_ping_locked, init_keepalive_ping, t,
2810
2775
  grpc_schedule_on_exec_ctx);
@@ -2832,7 +2797,7 @@ static void start_keepalive_ping_locked(void* arg, grpc_error* error) {
2832
2797
  }
2833
2798
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
2834
2799
  GRPC_TRACE_FLAG_ENABLED(grpc_keepalive_trace)) {
2835
- gpr_log(GPR_INFO, "%s: Start keepalive ping", t->peer_string);
2800
+ gpr_log(GPR_INFO, "%s: Start keepalive ping", t->peer_string.c_str());
2836
2801
  }
2837
2802
  GRPC_CHTTP2_REF_TRANSPORT(t, "keepalive watchdog");
2838
2803
  GRPC_CLOSURE_INIT(&t->keepalive_watchdog_fired_locked,
@@ -2856,11 +2821,11 @@ static void finish_keepalive_ping_locked(void* arg, grpc_error* error) {
2856
2821
  if (error == GRPC_ERROR_NONE) {
2857
2822
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
2858
2823
  GRPC_TRACE_FLAG_ENABLED(grpc_keepalive_trace)) {
2859
- gpr_log(GPR_INFO, "%s: Finish keepalive ping", t->peer_string);
2824
+ gpr_log(GPR_INFO, "%s: Finish keepalive ping", t->peer_string.c_str());
2860
2825
  }
2861
2826
  if (!t->keepalive_ping_started) {
2862
- /* start_keepalive_ping_locked has not run yet. Reschedule
2863
- * finish_keepalive_ping_locked for it to be run later. */
2827
+ // start_keepalive_ping_locked has not run yet. Reschedule
2828
+ // finish_keepalive_ping_locked for it to be run later.
2864
2829
  t->combiner->Run(
2865
2830
  GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked,
2866
2831
  finish_keepalive_ping_locked, t, nullptr),
@@ -2894,7 +2859,7 @@ static void keepalive_watchdog_fired_locked(void* arg, grpc_error* error) {
2894
2859
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
2895
2860
  if (error == GRPC_ERROR_NONE) {
2896
2861
  gpr_log(GPR_INFO, "%s: Keepalive watchdog fired. Closing transport.",
2897
- t->peer_string);
2862
+ t->peer_string.c_str());
2898
2863
  t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DYING;
2899
2864
  close_transport_locked(
2900
2865
  t, grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
@@ -2903,8 +2868,8 @@ static void keepalive_watchdog_fired_locked(void* arg, grpc_error* error) {
2903
2868
  GRPC_STATUS_UNAVAILABLE));
2904
2869
  }
2905
2870
  } else {
2906
- /* The watchdog timer should have been cancelled by
2907
- * finish_keepalive_ping_locked. */
2871
+ // The watchdog timer should have been cancelled by
2872
+ // finish_keepalive_ping_locked.
2908
2873
  if (GPR_UNLIKELY(error != GRPC_ERROR_CANCELLED)) {
2909
2874
  gpr_log(GPR_ERROR, "keepalive_ping_end state error: %d (expect: %d)",
2910
2875
  t->keepalive_state, GRPC_CHTTP2_KEEPALIVE_STATE_PINGING);
@@ -2913,21 +2878,22 @@ static void keepalive_watchdog_fired_locked(void* arg, grpc_error* error) {
2913
2878
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "keepalive watchdog");
2914
2879
  }
2915
2880
 
2916
- /*******************************************************************************
2917
- * CALLBACK LOOP
2918
- */
2881
+ //
2882
+ // CALLBACK LOOP
2883
+ //
2919
2884
 
2920
2885
  static void connectivity_state_set(grpc_chttp2_transport* t,
2921
2886
  grpc_connectivity_state state,
2887
+ const absl::Status& status,
2922
2888
  const char* reason) {
2923
2889
  GRPC_CHTTP2_IF_TRACING(
2924
2890
  gpr_log(GPR_INFO, "transport %p set connectivity_state=%d", t, state));
2925
- t->state_tracker.SetState(state, reason);
2891
+ t->state_tracker.SetState(state, status, reason);
2926
2892
  }
2927
2893
 
2928
- /*******************************************************************************
2929
- * POLLSET STUFF
2930
- */
2894
+ //
2895
+ // POLLSET STUFF
2896
+ //
2931
2897
 
2932
2898
  static void set_pollset(grpc_transport* gt, grpc_stream* /*gs*/,
2933
2899
  grpc_pollset* pollset) {
@@ -2941,9 +2907,9 @@ static void set_pollset_set(grpc_transport* gt, grpc_stream* /*gs*/,
2941
2907
  grpc_endpoint_add_to_pollset_set(t->ep, pollset_set);
2942
2908
  }
2943
2909
 
2944
- /*******************************************************************************
2945
- * BYTE STREAM
2946
- */
2910
+ //
2911
+ // BYTE STREAM
2912
+ //
2947
2913
 
2948
2914
  static void reset_byte_stream(void* arg, grpc_error* error) {
2949
2915
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(arg);
@@ -3031,7 +2997,7 @@ void Chttp2IncomingByteStream::NextLocked(void* arg,
3031
2997
  s->data_parser.parsing_frame = nullptr;
3032
2998
  }
3033
2999
  } else {
3034
- /* Should never reach here. */
3000
+ // Should never reach here.
3035
3001
  GPR_ASSERT(false);
3036
3002
  }
3037
3003
  } else {
@@ -3160,9 +3126,9 @@ void Chttp2IncomingByteStream::Shutdown(grpc_error* error) {
3160
3126
 
3161
3127
  } // namespace grpc_core
3162
3128
 
3163
- /*******************************************************************************
3164
- * RESOURCE QUOTAS
3165
- */
3129
+ //
3130
+ // RESOURCE QUOTAS
3131
+ //
3166
3132
 
3167
3133
  static void post_benign_reclaimer(grpc_chttp2_transport* t) {
3168
3134
  if (!t->benign_reclaimer_registered) {
@@ -3197,11 +3163,11 @@ static void benign_reclaimer_locked(void* arg, grpc_error* error) {
3197
3163
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3198
3164
  if (error == GRPC_ERROR_NONE &&
3199
3165
  grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
3200
- /* Channel with no active streams: send a goaway to try and make it
3201
- * disconnect cleanly */
3166
+ // Channel with no active streams: send a goaway to try and make it
3167
+ // disconnect cleanly
3202
3168
  if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
3203
3169
  gpr_log(GPR_INFO, "HTTP2: %s - send goaway to free memory",
3204
- t->peer_string);
3170
+ t->peer_string.c_str());
3205
3171
  }
3206
3172
  send_goaway(t,
3207
3173
  grpc_error_set_int(
@@ -3212,7 +3178,8 @@ static void benign_reclaimer_locked(void* arg, grpc_error* error) {
3212
3178
  gpr_log(GPR_INFO,
3213
3179
  "HTTP2: %s - skip benign reclamation, there are still %" PRIdPTR
3214
3180
  " streams",
3215
- t->peer_string, grpc_chttp2_stream_map_size(&t->stream_map));
3181
+ t->peer_string.c_str(),
3182
+ grpc_chttp2_stream_map_size(&t->stream_map));
3216
3183
  }
3217
3184
  t->benign_reclaimer_registered = false;
3218
3185
  if (error != GRPC_ERROR_CANCELLED) {
@@ -3237,8 +3204,8 @@ static void destructive_reclaimer_locked(void* arg, grpc_error* error) {
3237
3204
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(
3238
3205
  grpc_chttp2_stream_map_rand(&t->stream_map));
3239
3206
  if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
3240
- gpr_log(GPR_INFO, "HTTP2: %s - abandon stream id %d", t->peer_string,
3241
- s->id);
3207
+ gpr_log(GPR_INFO, "HTTP2: %s - abandon stream id %d",
3208
+ t->peer_string.c_str(), s->id);
3242
3209
  }
3243
3210
  grpc_chttp2_cancel_stream(
3244
3211
  t, s,
@@ -3246,10 +3213,10 @@ static void destructive_reclaimer_locked(void* arg, grpc_error* error) {
3246
3213
  GRPC_ERROR_INT_HTTP2_ERROR,
3247
3214
  GRPC_HTTP2_ENHANCE_YOUR_CALM));
3248
3215
  if (n > 1) {
3249
- /* Since we cancel one stream per destructive reclamation, if
3250
- there are more streams left, we can immediately post a new
3251
- reclaimer in case the resource quota needs to free more
3252
- memory */
3216
+ // Since we cancel one stream per destructive reclamation, if
3217
+ // there are more streams left, we can immediately post a new
3218
+ // reclaimer in case the resource quota needs to free more
3219
+ // memory
3253
3220
  post_destructive_reclaimer(t);
3254
3221
  }
3255
3222
  }
@@ -3260,9 +3227,9 @@ static void destructive_reclaimer_locked(void* arg, grpc_error* error) {
3260
3227
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "destructive_reclaimer");
3261
3228
  }
3262
3229
 
3263
- /*******************************************************************************
3264
- * MONITORING
3265
- */
3230
+ //
3231
+ // MONITORING
3232
+ //
3266
3233
 
3267
3234
  const char* grpc_chttp2_initiate_write_reason_string(
3268
3235
  grpc_chttp2_initiate_write_reason reason) {
@@ -3299,6 +3266,8 @@ const char* grpc_chttp2_initiate_write_reason_string(
3299
3266
  return "FLOW_CONTROL_UNSTALLED_BY_UPDATE";
3300
3267
  case GRPC_CHTTP2_INITIATE_WRITE_APPLICATION_PING:
3301
3268
  return "APPLICATION_PING";
3269
+ case GRPC_CHTTP2_INITIATE_WRITE_BDP_PING:
3270
+ return "BDP_PING";
3302
3271
  case GRPC_CHTTP2_INITIATE_WRITE_KEEPALIVE_PING:
3303
3272
  return "KEEPALIVE_PING";
3304
3273
  case GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL_UNSTALLED: