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
@@ -117,7 +117,6 @@ grpc_arg grpc_channel_arg_pointer_create(char* name, void* value,
117
117
  const grpc_arg_pointer_vtable* vtable);
118
118
 
119
119
  // Returns a string representing channel args in human-readable form.
120
- // Callers takes ownership of result.
121
120
  std::string grpc_channel_args_string(const grpc_channel_args* args);
122
121
 
123
122
  // Takes ownership of the old_args
@@ -48,40 +48,6 @@
48
48
  namespace grpc_core {
49
49
  namespace channelz {
50
50
 
51
- //
52
- // channel arg code
53
- //
54
-
55
- namespace {
56
-
57
- void* parent_uuid_copy(void* p) { return p; }
58
- void parent_uuid_destroy(void* /*p*/) {}
59
- int parent_uuid_cmp(void* p1, void* p2) { return GPR_ICMP(p1, p2); }
60
- const grpc_arg_pointer_vtable parent_uuid_vtable = {
61
- parent_uuid_copy, parent_uuid_destroy, parent_uuid_cmp};
62
-
63
- } // namespace
64
-
65
- grpc_arg MakeParentUuidArg(intptr_t parent_uuid) {
66
- // We would ideally like to store the uuid in an integer argument.
67
- // Unfortunately, that won't work, because intptr_t (the type used for
68
- // uuids) doesn't fit in an int (the type used for integer args).
69
- // So instead, we use a hack to store it as a pointer, because
70
- // intptr_t should be the same size as void*.
71
- static_assert(sizeof(intptr_t) <= sizeof(void*),
72
- "can't fit intptr_t inside of void*");
73
- return grpc_channel_arg_pointer_create(
74
- const_cast<char*>(GRPC_ARG_CHANNELZ_PARENT_UUID),
75
- reinterpret_cast<void*>(parent_uuid), &parent_uuid_vtable);
76
- }
77
-
78
- intptr_t GetParentUuidFromArgs(const grpc_channel_args& args) {
79
- const grpc_arg* arg =
80
- grpc_channel_args_find(&args, GRPC_ARG_CHANNELZ_PARENT_UUID);
81
- if (arg == nullptr || arg->type != GRPC_ARG_POINTER) return 0;
82
- return reinterpret_cast<intptr_t>(arg->value.pointer.p);
83
- }
84
-
85
51
  //
86
52
  // BaseNode
87
53
  //
@@ -171,13 +137,12 @@ void CallCountingHelper::PopulateCallCounts(Json::Object* object) {
171
137
  //
172
138
 
173
139
  ChannelNode::ChannelNode(std::string target, size_t channel_tracer_max_nodes,
174
- intptr_t parent_uuid)
175
- : BaseNode(parent_uuid == 0 ? EntityType::kTopLevelChannel
176
- : EntityType::kInternalChannel,
140
+ bool is_internal_channel)
141
+ : BaseNode(is_internal_channel ? EntityType::kInternalChannel
142
+ : EntityType::kTopLevelChannel,
177
143
  target),
178
144
  target_(std::move(target)),
179
- trace_(channel_tracer_max_nodes),
180
- parent_uuid_(parent_uuid) {}
145
+ trace_(channel_tracer_max_nodes) {}
181
146
 
182
147
  const char* ChannelNode::GetChannelConnectivityStateChangeString(
183
148
  grpc_connectivity_state state) {
@@ -235,18 +200,18 @@ void ChannelNode::PopulateChildRefs(Json::Object* json) {
235
200
  MutexLock lock(&child_mu_);
236
201
  if (!child_subchannels_.empty()) {
237
202
  Json::Array array;
238
- for (const auto& p : child_subchannels_) {
203
+ for (intptr_t subchannel_uuid : child_subchannels_) {
239
204
  array.emplace_back(Json::Object{
240
- {"subchannelId", std::to_string(p.first)},
205
+ {"subchannelId", std::to_string(subchannel_uuid)},
241
206
  });
242
207
  }
243
208
  (*json)["subchannelRef"] = std::move(array);
244
209
  }
245
210
  if (!child_channels_.empty()) {
246
211
  Json::Array array;
247
- for (const auto& p : child_channels_) {
212
+ for (intptr_t channel_uuid : child_channels_) {
248
213
  array.emplace_back(Json::Object{
249
- {"channelId", std::to_string(p.first)},
214
+ {"channelId", std::to_string(channel_uuid)},
250
215
  });
251
216
  }
252
217
  (*json)["channelRef"] = std::move(array);
@@ -261,7 +226,7 @@ void ChannelNode::SetConnectivityState(grpc_connectivity_state state) {
261
226
 
262
227
  void ChannelNode::AddChildChannel(intptr_t child_uuid) {
263
228
  MutexLock lock(&child_mu_);
264
- child_channels_.insert(std::make_pair(child_uuid, true));
229
+ child_channels_.insert(child_uuid);
265
230
  }
266
231
 
267
232
  void ChannelNode::RemoveChildChannel(intptr_t child_uuid) {
@@ -271,7 +236,7 @@ void ChannelNode::RemoveChildChannel(intptr_t child_uuid) {
271
236
 
272
237
  void ChannelNode::AddChildSubchannel(intptr_t child_uuid) {
273
238
  MutexLock lock(&child_mu_);
274
- child_subchannels_.insert(std::make_pair(child_uuid, true));
239
+ child_subchannels_.insert(child_uuid);
275
240
  }
276
241
 
277
242
  void ChannelNode::RemoveChildSubchannel(intptr_t child_uuid) {
@@ -283,7 +248,7 @@ void ChannelNode::RemoveChildSubchannel(intptr_t child_uuid) {
283
248
  // ServerNode
284
249
  //
285
250
 
286
- ServerNode::ServerNode(grpc_server* /*server*/, size_t channel_tracer_max_nodes)
251
+ ServerNode::ServerNode(size_t channel_tracer_max_nodes)
287
252
  : BaseNode(EntityType::kServer, ""), trace_(channel_tracer_max_nodes) {}
288
253
 
289
254
  ServerNode::~ServerNode() {}
@@ -310,27 +275,26 @@ void ServerNode::RemoveChildListenSocket(intptr_t child_uuid) {
310
275
 
311
276
  std::string ServerNode::RenderServerSockets(intptr_t start_socket_id,
312
277
  intptr_t max_results) {
278
+ GPR_ASSERT(start_socket_id >= 0);
279
+ GPR_ASSERT(max_results >= 0);
313
280
  // If user does not set max_results, we choose 500.
314
281
  size_t pagination_limit = max_results == 0 ? 500 : max_results;
315
282
  Json::Object object;
316
283
  {
317
284
  MutexLock lock(&child_mu_);
318
285
  size_t sockets_rendered = 0;
319
- if (!child_sockets_.empty()) {
320
- // Create list of socket refs.
321
- Json::Array array;
322
- const size_t limit = GPR_MIN(child_sockets_.size(), pagination_limit);
323
- for (auto it = child_sockets_.lower_bound(start_socket_id);
324
- it != child_sockets_.end() && sockets_rendered < limit;
325
- ++it, ++sockets_rendered) {
326
- array.emplace_back(Json::Object{
327
- {"socketId", std::to_string(it->first)},
328
- {"name", it->second->name()},
329
- });
330
- }
331
- object["socketRef"] = std::move(array);
286
+ // Create list of socket refs.
287
+ Json::Array array;
288
+ auto it = child_sockets_.lower_bound(start_socket_id);
289
+ for (; it != child_sockets_.end() && sockets_rendered < pagination_limit;
290
+ ++it, ++sockets_rendered) {
291
+ array.emplace_back(Json::Object{
292
+ {"socketId", std::to_string(it->first)},
293
+ {"name", it->second->name()},
294
+ });
332
295
  }
333
- if (sockets_rendered == child_sockets_.size()) object["end"] = true;
296
+ object["socketRef"] = std::move(array);
297
+ if (it == child_sockets_.end()) object["end"] = true;
334
298
  }
335
299
  Json json = std::move(object);
336
300
  return json.Dump();
@@ -23,6 +23,7 @@
23
23
 
24
24
  #include <grpc/grpc.h>
25
25
 
26
+ #include <set>
26
27
  #include <string>
27
28
 
28
29
  #include "absl/container/inlined_vector.h"
@@ -42,8 +43,9 @@
42
43
  // Channel arg key for channelz node.
43
44
  #define GRPC_ARG_CHANNELZ_CHANNEL_NODE "grpc.channelz_channel_node"
44
45
 
45
- // Channel arg key to encode the channelz uuid of the channel's parent.
46
- #define GRPC_ARG_CHANNELZ_PARENT_UUID "grpc.channelz_parent_uuid"
46
+ // Channel arg key for indicating an internal channel.
47
+ #define GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL \
48
+ "grpc.channelz_is_internal_channel"
47
49
 
48
50
  /** This is the default value for whether or not to enable channelz. If
49
51
  * GRPC_ARG_ENABLE_CHANNELZ is set, it will override this default value. */
@@ -59,10 +61,6 @@ namespace grpc_core {
59
61
 
60
62
  namespace channelz {
61
63
 
62
- // Helpers for getting and setting GRPC_ARG_CHANNELZ_PARENT_UUID.
63
- grpc_arg MakeParentUuidArg(intptr_t parent_uuid);
64
- intptr_t GetParentUuidFromArgs(const grpc_channel_args& args);
65
-
66
64
  class SocketNode;
67
65
  class ListenSocketNode;
68
66
 
@@ -176,14 +174,12 @@ class CallCountingHelper {
176
174
  class ChannelNode : public BaseNode {
177
175
  public:
178
176
  ChannelNode(std::string target, size_t channel_tracer_max_nodes,
179
- intptr_t parent_uuid);
177
+ bool is_internal_channel);
180
178
 
181
179
  // Returns the string description of the given connectivity state.
182
180
  static const char* GetChannelConnectivityStateChangeString(
183
181
  grpc_connectivity_state state);
184
182
 
185
- intptr_t parent_uuid() const { return parent_uuid_; }
186
-
187
183
  Json RenderJson() override;
188
184
 
189
185
  // proxy methods to composed classes.
@@ -213,32 +209,28 @@ class ChannelNode : public BaseNode {
213
209
  void RemoveChildSubchannel(intptr_t child_uuid);
214
210
 
215
211
  private:
216
- void PopulateChildRefs(Json::Object* json);
217
-
218
- // to allow the channel trace test to access trace_.
212
+ // Allows the channel trace test to access trace_.
219
213
  friend class testing::ChannelNodePeer;
220
214
 
215
+ void PopulateChildRefs(Json::Object* json);
216
+
221
217
  std::string target_;
222
218
  CallCountingHelper call_counter_;
223
219
  ChannelTrace trace_;
224
- const intptr_t parent_uuid_;
225
220
 
226
221
  // Least significant bit indicates whether the value is set. Remaining
227
222
  // bits are a grpc_connectivity_state value.
228
223
  Atomic<int> connectivity_state_{0};
229
224
 
230
- Mutex child_mu_; // Guards child maps below.
231
- // TODO(roth): We don't actually use the values here, only the keys, so
232
- // these should be sets instead of maps, but we don't currently have a set
233
- // implementation. Change this if/when we have one.
234
- std::map<intptr_t, bool> child_channels_;
235
- std::map<intptr_t, bool> child_subchannels_;
225
+ Mutex child_mu_; // Guards sets below.
226
+ std::set<intptr_t> child_channels_;
227
+ std::set<intptr_t> child_subchannels_;
236
228
  };
237
229
 
238
230
  // Handles channelz bookkeeping for servers
239
231
  class ServerNode : public BaseNode {
240
232
  public:
241
- ServerNode(grpc_server* server, size_t channel_tracer_max_nodes);
233
+ explicit ServerNode(size_t channel_tracer_max_nodes);
242
234
 
243
235
  ~ServerNode() override;
244
236
 
@@ -78,8 +78,7 @@ RefCountedPtr<BaseNode> ChannelzRegistry::InternalGet(intptr_t uuid) {
78
78
  // Found node. Return only if its refcount is not zero (i.e., when we
79
79
  // know that there is no other thread about to destroy it).
80
80
  BaseNode* node = it->second;
81
- if (!node->RefIfNonZero()) return nullptr;
82
- return RefCountedPtr<BaseNode>(node);
81
+ return node->RefIfNonZero();
83
82
  }
84
83
 
85
84
  std::string ChannelzRegistry::InternalGetTopChannels(
@@ -91,8 +90,9 @@ std::string ChannelzRegistry::InternalGetTopChannels(
91
90
  for (auto it = node_map_.lower_bound(start_channel_id);
92
91
  it != node_map_.end(); ++it) {
93
92
  BaseNode* node = it->second;
93
+ RefCountedPtr<BaseNode> node_ref;
94
94
  if (node->type() == BaseNode::EntityType::kTopLevelChannel &&
95
- node->RefIfNonZero()) {
95
+ (node_ref = node->RefIfNonZero()) != nullptr) {
96
96
  // Check if we are over pagination limit to determine if we need to set
97
97
  // the "end" element. If we don't go through this block, we know that
98
98
  // when the loop terminates, we have <= to kPaginationLimit.
@@ -100,10 +100,10 @@ std::string ChannelzRegistry::InternalGetTopChannels(
100
100
  // refcount, we need to decrease it, but we can't unref while
101
101
  // holding the lock, because this may lead to a deadlock.
102
102
  if (top_level_channels.size() == kPaginationLimit) {
103
- node_after_pagination_limit.reset(node);
103
+ node_after_pagination_limit = std::move(node_ref);
104
104
  break;
105
105
  }
106
- top_level_channels.emplace_back(node);
106
+ top_level_channels.emplace_back(std::move(node_ref));
107
107
  }
108
108
  }
109
109
  }
@@ -129,8 +129,9 @@ std::string ChannelzRegistry::InternalGetServers(intptr_t start_server_id) {
129
129
  for (auto it = node_map_.lower_bound(start_server_id);
130
130
  it != node_map_.end(); ++it) {
131
131
  BaseNode* node = it->second;
132
+ RefCountedPtr<BaseNode> node_ref;
132
133
  if (node->type() == BaseNode::EntityType::kServer &&
133
- node->RefIfNonZero()) {
134
+ (node_ref = node->RefIfNonZero()) != nullptr) {
134
135
  // Check if we are over pagination limit to determine if we need to set
135
136
  // the "end" element. If we don't go through this block, we know that
136
137
  // when the loop terminates, we have <= to kPaginationLimit.
@@ -138,10 +139,10 @@ std::string ChannelzRegistry::InternalGetServers(intptr_t start_server_id) {
138
139
  // refcount, we need to decrease it, but we can't unref while
139
140
  // holding the lock, because this may lead to a deadlock.
140
141
  if (servers.size() == kPaginationLimit) {
141
- node_after_pagination_limit.reset(node);
142
+ node_after_pagination_limit = std::move(node_ref);
142
143
  break;
143
144
  }
144
- servers.emplace_back(node);
145
+ servers.emplace_back(std::move(node_ref));
145
146
  }
146
147
  }
147
148
  }
@@ -164,9 +165,9 @@ void ChannelzRegistry::InternalLogAllEntities() {
164
165
  {
165
166
  MutexLock lock(&mu_);
166
167
  for (auto& p : node_map_) {
167
- BaseNode* node = p.second;
168
- if (node->RefIfNonZero()) {
169
- nodes.emplace_back(node);
168
+ RefCountedPtr<BaseNode> node = p.second->RefIfNonZero();
169
+ if (node != nullptr) {
170
+ nodes.emplace_back(std::move(node));
170
171
  }
171
172
  }
172
173
  }
@@ -208,10 +209,12 @@ char* grpc_channelz_get_server(intptr_t server_id) {
208
209
  char* grpc_channelz_get_server_sockets(intptr_t server_id,
209
210
  intptr_t start_socket_id,
210
211
  intptr_t max_results) {
212
+ // Validate inputs before handing them of to the renderer.
211
213
  grpc_core::RefCountedPtr<grpc_core::channelz::BaseNode> base_node =
212
214
  grpc_core::channelz::ChannelzRegistry::Get(server_id);
213
215
  if (base_node == nullptr ||
214
- base_node->type() != grpc_core::channelz::BaseNode::EntityType::kServer) {
216
+ base_node->type() != grpc_core::channelz::BaseNode::EntityType::kServer ||
217
+ start_socket_id < 0 || max_results < 0) {
215
218
  return nullptr;
216
219
  }
217
220
  // This cast is ok since we have just checked to make sure base_node is
@@ -23,6 +23,9 @@
23
23
 
24
24
  #include <stdint.h>
25
25
 
26
+ #include <map>
27
+ #include <string>
28
+
26
29
  #include "src/core/lib/channel/channel_trace.h"
27
30
  #include "src/core/lib/channel/channelz.h"
28
31
  #include "src/core/lib/gprpp/map.h"
@@ -116,10 +116,6 @@ void gpr_cv_destroy(gpr_cv* cv) {
116
116
  #endif
117
117
  }
118
118
 
119
- #define gpr_convert_clock_type_debug(t, clock_type, now1, now2, add_result, \
120
- sub_result) \
121
- gpr_convert_clock_type((t), (clock_type))
122
-
123
119
  int gpr_cv_wait(gpr_cv* cv, gpr_mu* mu, gpr_timespec abs_deadline) {
124
120
  int err = 0;
125
121
  if (gpr_time_cmp(abs_deadline, gpr_inf_future(abs_deadline.clock_type)) ==
@@ -132,11 +128,9 @@ int gpr_cv_wait(gpr_cv* cv, gpr_mu* mu, gpr_timespec abs_deadline) {
132
128
  } else {
133
129
  struct timespec abs_deadline_ts;
134
130
  #if GPR_LINUX
135
- abs_deadline = gpr_convert_clock_type_debug(
136
- abs_deadline, GPR_CLOCK_MONOTONIC, now1, now2, add_result, sub_result);
131
+ abs_deadline = gpr_convert_clock_type(abs_deadline, GPR_CLOCK_MONOTONIC);
137
132
  #else
138
- abs_deadline = gpr_convert_clock_type_debug(
139
- abs_deadline, GPR_CLOCK_REALTIME, now1, now2, add_result, sub_result);
133
+ abs_deadline = gpr_convert_clock_type(abs_deadline, GPR_CLOCK_REALTIME);
140
134
  #endif // GPR_LINUX
141
135
  abs_deadline_ts.tv_sec = static_cast<time_t>(abs_deadline.tv_sec);
142
136
  abs_deadline_ts.tv_nsec = abs_deadline.tv_nsec;
@@ -31,6 +31,7 @@
31
31
 
32
32
  #include "src/core/lib/gpr/time_precise.h"
33
33
 
34
+ #ifndef GPR_CYCLE_COUNTER_CUSTOM
34
35
  #if GPR_CYCLE_COUNTER_RDTSC_32 || GPR_CYCLE_COUNTER_RDTSC_64
35
36
  #if GPR_LINUX
36
37
  static bool read_freq_from_kernel(double* freq) {
@@ -163,3 +164,4 @@ gpr_timespec gpr_cycle_counter_sub(gpr_cycle_counter a, gpr_cycle_counter b) {
163
164
  gpr_cycle_counter_to_time(b));
164
165
  }
165
166
  #endif /* GPR_CYCLE_COUNTER_FALLBACK */
167
+ #endif /* !GPR_CYCLE_COUNTER_CUSTOM */
@@ -31,7 +31,10 @@
31
31
  // Using gpr_get_cycle_counter() is preferred to using ExecCtx::Get()->Now()
32
32
  // whenever possible.
33
33
 
34
- #if GPR_CYCLE_COUNTER_RDTSC_32
34
+ #if GPR_CYCLE_COUNTER_CUSTOM
35
+ typedef int64_t gpr_cycle_counter;
36
+ gpr_cycle_counter gpr_get_cycle_counter();
37
+ #elif GPR_CYCLE_COUNTER_RDTSC_32
35
38
  typedef int64_t gpr_cycle_counter;
36
39
  inline gpr_cycle_counter gpr_get_cycle_counter() {
37
40
  int64_t ret;
@@ -54,7 +57,8 @@ gpr_cycle_counter gpr_get_cycle_counter();
54
57
  #else
55
58
  #error Must define exactly one of \
56
59
  GPR_CYCLE_COUNTER_RDTSC_32, \
57
- GPR_CYCLE_COUNTER_RDTSC_64, or \
60
+ GPR_CYCLE_COUNTER_RDTSC_64, \
61
+ GPR_CYCLE_COUNTER_CUSTOM, or \
58
62
  GPR_CYCLE_COUNTER_FALLBACK
59
63
  #endif
60
64
 
@@ -0,0 +1,336 @@
1
+ //
2
+ // Copyright 2020 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
+ //
16
+
17
+ #ifndef GRPC_CORE_LIB_GPRPP_DUAL_REF_COUNTED_H
18
+ #define GRPC_CORE_LIB_GPRPP_DUAL_REF_COUNTED_H
19
+
20
+ #include <grpc/support/port_platform.h>
21
+
22
+ #include <grpc/support/atm.h>
23
+ #include <grpc/support/log.h>
24
+ #include <grpc/support/sync.h>
25
+
26
+ #include <atomic>
27
+ #include <cassert>
28
+ #include <cinttypes>
29
+
30
+ #include "src/core/lib/debug/trace.h"
31
+ #include "src/core/lib/gprpp/atomic.h"
32
+ #include "src/core/lib/gprpp/debug_location.h"
33
+ #include "src/core/lib/gprpp/orphanable.h"
34
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
35
+
36
+ namespace grpc_core {
37
+
38
+ // DualRefCounted is an interface for reference-counted objects with two
39
+ // classes of refs: strong refs (usually just called "refs") and weak refs.
40
+ // This supports cases where an object needs to start shutting down when
41
+ // all external callers are done with it (represented by strong refs) but
42
+ // cannot be destroyed until all internal callbacks are complete
43
+ // (represented by weak refs).
44
+ //
45
+ // Each class of refs can be incremented and decremented independently.
46
+ // Objects start with 1 strong ref and 0 weak refs at instantiation.
47
+ // When the strong refcount reaches 0, the object's Orphan() method is called.
48
+ // When the weak refcount reaches 0, the object is destroyed.
49
+ //
50
+ // This will be used by CRTP (curiously-recurring template pattern), e.g.:
51
+ // class MyClass : public RefCounted<MyClass> { ... };
52
+ template <typename Child>
53
+ class DualRefCounted : public Orphanable {
54
+ public:
55
+ virtual ~DualRefCounted() = default;
56
+
57
+ RefCountedPtr<Child> Ref() GRPC_MUST_USE_RESULT {
58
+ IncrementRefCount();
59
+ return RefCountedPtr<Child>(static_cast<Child*>(this));
60
+ }
61
+
62
+ RefCountedPtr<Child> Ref(const DebugLocation& location,
63
+ const char* reason) GRPC_MUST_USE_RESULT {
64
+ IncrementRefCount(location, reason);
65
+ return RefCountedPtr<Child>(static_cast<Child*>(this));
66
+ }
67
+
68
+ void Unref() {
69
+ // Convert strong ref to weak ref.
70
+ const uint64_t prev_ref_pair =
71
+ refs_.FetchAdd(MakeRefPair(-1, 1), MemoryOrder::ACQ_REL);
72
+ const uint32_t strong_refs = GetStrongRefs(prev_ref_pair);
73
+ #ifndef NDEBUG
74
+ const uint32_t weak_refs = GetWeakRefs(prev_ref_pair);
75
+ if (trace_flag_ != nullptr && trace_flag_->enabled()) {
76
+ gpr_log(GPR_INFO, "%s:%p unref %d -> %d, weak_ref %d -> %d",
77
+ trace_flag_->name(), this, strong_refs, strong_refs - 1,
78
+ weak_refs, weak_refs + 1);
79
+ }
80
+ GPR_ASSERT(strong_refs > 0);
81
+ #endif
82
+ if (GPR_UNLIKELY(strong_refs == 1)) {
83
+ Orphan();
84
+ }
85
+ // Now drop the weak ref.
86
+ WeakUnref();
87
+ }
88
+ void Unref(const DebugLocation& location, const char* reason) {
89
+ const uint64_t prev_ref_pair =
90
+ refs_.FetchAdd(MakeRefPair(-1, 1), MemoryOrder::ACQ_REL);
91
+ const uint32_t strong_refs = GetStrongRefs(prev_ref_pair);
92
+ #ifndef NDEBUG
93
+ const uint32_t weak_refs = GetWeakRefs(prev_ref_pair);
94
+ if (trace_flag_ != nullptr && trace_flag_->enabled()) {
95
+ gpr_log(GPR_INFO, "%s:%p %s:%d unref %d -> %d, weak_ref %d -> %d) %s",
96
+ trace_flag_->name(), this, location.file(), location.line(),
97
+ strong_refs, strong_refs - 1, weak_refs, weak_refs + 1, reason);
98
+ }
99
+ GPR_ASSERT(strong_refs > 0);
100
+ #else
101
+ // Avoid unused-parameter warnings for debug-only parameters
102
+ (void)location;
103
+ (void)reason;
104
+ #endif
105
+ if (GPR_UNLIKELY(strong_refs == 1)) {
106
+ Orphan();
107
+ }
108
+ // Now drop the weak ref.
109
+ WeakUnref(location, reason);
110
+ }
111
+
112
+ RefCountedPtr<Child> RefIfNonZero() GRPC_MUST_USE_RESULT {
113
+ uint64_t prev_ref_pair = refs_.Load(MemoryOrder::ACQUIRE);
114
+ do {
115
+ const uint32_t strong_refs = GetStrongRefs(prev_ref_pair);
116
+ #ifndef NDEBUG
117
+ const uint32_t weak_refs = GetWeakRefs(prev_ref_pair);
118
+ if (trace_flag_ != nullptr && trace_flag_->enabled()) {
119
+ gpr_log(GPR_INFO, "%s:%p ref_if_non_zero %d -> %d (weak_refs=%d)",
120
+ trace_flag_->name(), this, strong_refs, strong_refs + 1,
121
+ weak_refs);
122
+ }
123
+ #endif
124
+ if (strong_refs == 0) return nullptr;
125
+ } while (!refs_.CompareExchangeWeak(
126
+ &prev_ref_pair, prev_ref_pair + MakeRefPair(1, 0), MemoryOrder::ACQ_REL,
127
+ MemoryOrder::ACQUIRE));
128
+ return RefCountedPtr<Child>(static_cast<Child*>(this));
129
+ }
130
+
131
+ RefCountedPtr<Child> RefIfNonZero(const DebugLocation& location,
132
+ const char* reason) GRPC_MUST_USE_RESULT {
133
+ uint64_t prev_ref_pair = refs_.Load(MemoryOrder::ACQUIRE);
134
+ do {
135
+ const uint32_t strong_refs = GetStrongRefs(prev_ref_pair);
136
+ #ifndef NDEBUG
137
+ const uint32_t weak_refs = GetWeakRefs(prev_ref_pair);
138
+ if (trace_flag_ != nullptr && trace_flag_->enabled()) {
139
+ gpr_log(GPR_INFO,
140
+ "%s:%p %s:%d ref_if_non_zero %d -> %d (weak_refs=%d) %s",
141
+ trace_flag_->name(), this, location.file(), location.line(),
142
+ strong_refs, strong_refs + 1, weak_refs, reason);
143
+ }
144
+ #else
145
+ // Avoid unused-parameter warnings for debug-only parameters
146
+ (void)location;
147
+ (void)reason;
148
+ #endif
149
+ if (strong_refs == 0) return nullptr;
150
+ } while (!refs_.CompareExchangeWeak(
151
+ &prev_ref_pair, prev_ref_pair + MakeRefPair(1, 0), MemoryOrder::ACQ_REL,
152
+ MemoryOrder::ACQUIRE));
153
+ return RefCountedPtr<Child>(static_cast<Child*>(this));
154
+ }
155
+
156
+ WeakRefCountedPtr<Child> WeakRef() GRPC_MUST_USE_RESULT {
157
+ IncrementWeakRefCount();
158
+ return WeakRefCountedPtr<Child>(static_cast<Child*>(this));
159
+ }
160
+
161
+ WeakRefCountedPtr<Child> WeakRef(const DebugLocation& location,
162
+ const char* reason) GRPC_MUST_USE_RESULT {
163
+ IncrementWeakRefCount(location, reason);
164
+ return WeakRefCountedPtr<Child>(static_cast<Child*>(this));
165
+ }
166
+
167
+ void WeakUnref() {
168
+ #ifndef NDEBUG
169
+ // Grab a copy of the trace flag before the atomic change, since we
170
+ // can't safely access it afterwards if we're going to be freed.
171
+ auto* trace_flag = trace_flag_;
172
+ #endif
173
+ const uint64_t prev_ref_pair =
174
+ refs_.FetchSub(MakeRefPair(0, 1), MemoryOrder::ACQ_REL);
175
+ const uint32_t weak_refs = GetWeakRefs(prev_ref_pair);
176
+ #ifndef NDEBUG
177
+ const uint32_t strong_refs = GetStrongRefs(prev_ref_pair);
178
+ if (trace_flag != nullptr && trace_flag->enabled()) {
179
+ gpr_log(GPR_INFO, "%s:%p weak_unref %d -> %d (refs=%d)",
180
+ trace_flag->name(), this, weak_refs, weak_refs - 1, strong_refs);
181
+ }
182
+ GPR_ASSERT(weak_refs > 0);
183
+ #endif
184
+ if (GPR_UNLIKELY(prev_ref_pair == MakeRefPair(0, 1))) {
185
+ delete static_cast<Child*>(this);
186
+ }
187
+ }
188
+ void WeakUnref(const DebugLocation& location, const char* reason) {
189
+ #ifndef NDEBUG
190
+ // Grab a copy of the trace flag before the atomic change, since we
191
+ // can't safely access it afterwards if we're going to be freed.
192
+ auto* trace_flag = trace_flag_;
193
+ #endif
194
+ const uint64_t prev_ref_pair =
195
+ refs_.FetchSub(MakeRefPair(0, 1), MemoryOrder::ACQ_REL);
196
+ const uint32_t weak_refs = GetWeakRefs(prev_ref_pair);
197
+ #ifndef NDEBUG
198
+ const uint32_t strong_refs = GetStrongRefs(prev_ref_pair);
199
+ if (trace_flag != nullptr && trace_flag->enabled()) {
200
+ gpr_log(GPR_INFO, "%s:%p %s:%d weak_unref %d -> %d (refs=%d) %s",
201
+ trace_flag->name(), this, location.file(), location.line(),
202
+ weak_refs, weak_refs - 1, strong_refs, reason);
203
+ }
204
+ GPR_ASSERT(weak_refs > 0);
205
+ #else
206
+ // Avoid unused-parameter warnings for debug-only parameters
207
+ (void)location;
208
+ (void)reason;
209
+ #endif
210
+ if (GPR_UNLIKELY(prev_ref_pair == MakeRefPair(0, 1))) {
211
+ delete static_cast<Child*>(this);
212
+ }
213
+ }
214
+
215
+ // Not copyable nor movable.
216
+ DualRefCounted(const DualRefCounted&) = delete;
217
+ DualRefCounted& operator=(const DualRefCounted&) = delete;
218
+
219
+ protected:
220
+ // TraceFlagT is defined to accept both DebugOnlyTraceFlag and TraceFlag.
221
+ // Note: RefCount tracing is only enabled on debug builds, even when a
222
+ // TraceFlag is used.
223
+ template <typename TraceFlagT = TraceFlag>
224
+ explicit DualRefCounted(
225
+ TraceFlagT*
226
+ #ifndef NDEBUG
227
+ // Leave unnamed if NDEBUG to avoid unused parameter warning
228
+ trace_flag
229
+ #endif
230
+ = nullptr,
231
+ int32_t initial_refcount = 1)
232
+ :
233
+ #ifndef NDEBUG
234
+ trace_flag_(trace_flag),
235
+ #endif
236
+ refs_(MakeRefPair(initial_refcount, 0)) {
237
+ }
238
+
239
+ private:
240
+ // Allow RefCountedPtr<> to access IncrementRefCount().
241
+ template <typename T>
242
+ friend class RefCountedPtr;
243
+ // Allow WeakRefCountedPtr<> to access IncrementWeakRefCount().
244
+ template <typename T>
245
+ friend class WeakRefCountedPtr;
246
+
247
+ // First 32 bits are strong refs, next 32 bits are weak refs.
248
+ static uint64_t MakeRefPair(uint32_t strong, uint32_t weak) {
249
+ return (static_cast<uint64_t>(strong) << 32) + static_cast<int64_t>(weak);
250
+ }
251
+ static uint32_t GetStrongRefs(uint64_t ref_pair) {
252
+ return static_cast<uint32_t>(ref_pair >> 32);
253
+ }
254
+ static uint32_t GetWeakRefs(uint64_t ref_pair) {
255
+ return static_cast<uint32_t>(ref_pair & 0xffffffffu);
256
+ }
257
+
258
+ void IncrementRefCount() {
259
+ #ifndef NDEBUG
260
+ const uint64_t prev_ref_pair =
261
+ refs_.FetchAdd(MakeRefPair(1, 0), MemoryOrder::RELAXED);
262
+ const uint32_t strong_refs = GetStrongRefs(prev_ref_pair);
263
+ const uint32_t weak_refs = GetWeakRefs(prev_ref_pair);
264
+ GPR_ASSERT(strong_refs != 0);
265
+ if (trace_flag_ != nullptr && trace_flag_->enabled()) {
266
+ gpr_log(GPR_INFO, "%s:%p ref %d -> %d; (weak_refs=%d)",
267
+ trace_flag_->name(), this, strong_refs, strong_refs + 1,
268
+ weak_refs);
269
+ }
270
+ #else
271
+ refs_.FetchAdd(MakeRefPair(1, 0), MemoryOrder::RELAXED);
272
+ #endif
273
+ }
274
+ void IncrementRefCount(const DebugLocation& location, const char* reason) {
275
+ #ifndef NDEBUG
276
+ const uint64_t prev_ref_pair =
277
+ refs_.FetchAdd(MakeRefPair(1, 0), MemoryOrder::RELAXED);
278
+ const uint32_t strong_refs = GetStrongRefs(prev_ref_pair);
279
+ const uint32_t weak_refs = GetWeakRefs(prev_ref_pair);
280
+ GPR_ASSERT(strong_refs != 0);
281
+ if (trace_flag_ != nullptr && trace_flag_->enabled()) {
282
+ gpr_log(GPR_INFO, "%s:%p %s:%d ref %d -> %d (weak_refs=%d) %s",
283
+ trace_flag_->name(), this, location.file(), location.line(),
284
+ strong_refs, strong_refs + 1, weak_refs, reason);
285
+ }
286
+ #else
287
+ // Use conditionally-important parameters
288
+ (void)location;
289
+ (void)reason;
290
+ refs_.FetchAdd(MakeRefPair(1, 0), MemoryOrder::RELAXED);
291
+ #endif
292
+ }
293
+
294
+ void IncrementWeakRefCount() {
295
+ #ifndef NDEBUG
296
+ const uint64_t prev_ref_pair =
297
+ refs_.FetchAdd(MakeRefPair(0, 1), MemoryOrder::RELAXED);
298
+ const uint32_t strong_refs = GetStrongRefs(prev_ref_pair);
299
+ const uint32_t weak_refs = GetWeakRefs(prev_ref_pair);
300
+ if (trace_flag_ != nullptr && trace_flag_->enabled()) {
301
+ gpr_log(GPR_INFO, "%s:%p weak_ref %d -> %d; (refs=%d)",
302
+ trace_flag_->name(), this, weak_refs, weak_refs + 1, strong_refs);
303
+ }
304
+ #else
305
+ refs_.FetchAdd(MakeRefPair(0, 1), MemoryOrder::RELAXED);
306
+ #endif
307
+ }
308
+ void IncrementWeakRefCount(const DebugLocation& location,
309
+ const char* reason) {
310
+ #ifndef NDEBUG
311
+ const uint64_t prev_ref_pair =
312
+ refs_.FetchAdd(MakeRefPair(0, 1), MemoryOrder::RELAXED);
313
+ const uint32_t strong_refs = GetStrongRefs(prev_ref_pair);
314
+ const uint32_t weak_refs = GetWeakRefs(prev_ref_pair);
315
+ if (trace_flag_ != nullptr && trace_flag_->enabled()) {
316
+ gpr_log(GPR_INFO, "%s:%p %s:%d weak_ref %d -> %d (refs=%d) %s",
317
+ trace_flag_->name(), this, location.file(), location.line(),
318
+ weak_refs, weak_refs + 1, strong_refs, reason);
319
+ }
320
+ #else
321
+ // Use conditionally-important parameters
322
+ (void)location;
323
+ (void)reason;
324
+ refs_.FetchAdd(MakeRefPair(0, 1), MemoryOrder::RELAXED);
325
+ #endif
326
+ }
327
+
328
+ #ifndef NDEBUG
329
+ TraceFlag* trace_flag_;
330
+ #endif
331
+ Atomic<uint64_t> refs_;
332
+ };
333
+
334
+ } // namespace grpc_core
335
+
336
+ #endif /* GRPC_CORE_LIB_GPRPP_DUAL_REF_COUNTED_H */