grpc 1.49.1 → 1.50.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 (270) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +54 -153
  3. data/include/grpc/event_engine/endpoint_config.h +11 -5
  4. data/include/grpc/event_engine/event_engine.h +1 -1
  5. data/include/grpc/impl/codegen/atm_gcc_atomic.h +19 -28
  6. data/include/grpc/impl/codegen/atm_gcc_sync.h +0 -2
  7. data/include/grpc/impl/codegen/atm_windows.h +0 -2
  8. data/include/grpc/impl/codegen/grpc_types.h +6 -0
  9. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +3 -3
  10. data/src/core/ext/filters/client_channel/backup_poller.cc +4 -6
  11. data/src/core/ext/filters/client_channel/client_channel.cc +33 -22
  12. data/src/core/ext/filters/client_channel/client_channel.h +1 -1
  13. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +0 -16
  14. data/src/core/ext/filters/client_channel/http_proxy.cc +12 -19
  15. data/src/core/ext/filters/client_channel/http_proxy.h +3 -2
  16. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +6 -4
  17. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -4
  18. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +0 -2
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +112 -96
  20. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +20 -11
  21. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +106 -108
  22. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +16 -0
  23. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +20 -13
  24. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +165 -257
  25. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +218 -231
  26. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +10 -6
  27. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +389 -444
  28. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +16 -16
  29. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +8 -13
  30. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +84 -96
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +38 -37
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +106 -186
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +106 -93
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +170 -218
  35. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +2 -2
  36. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -1
  37. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +13 -15
  38. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +84 -37
  39. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +11 -0
  40. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
  41. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +5 -3
  42. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +5 -4
  43. data/src/core/ext/filters/client_channel/retry_filter.cc +25 -29
  44. data/src/core/ext/filters/client_channel/subchannel.cc +38 -33
  45. data/src/core/ext/filters/client_channel/subchannel.h +12 -3
  46. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +1 -2
  47. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +23 -16
  48. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -0
  49. data/src/core/ext/filters/http/client/http_client_filter.cc +1 -2
  50. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +2 -4
  51. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -2
  52. data/src/core/ext/filters/http/server/http_server_filter.cc +1 -2
  53. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +12 -8
  54. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +32 -26
  55. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -1
  56. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +25 -130
  57. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +287 -0
  58. data/src/core/ext/transport/chttp2/transport/decode_huff.h +1018 -0
  59. data/src/core/ext/transport/chttp2/transport/flow_control.cc +83 -51
  60. data/src/core/ext/transport/chttp2/transport/flow_control.h +11 -6
  61. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +1 -2
  62. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +2 -20
  63. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +28 -28
  64. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +1 -10
  65. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +11 -6
  66. data/src/core/ext/transport/chttp2/transport/internal.h +2 -0
  67. data/src/core/ext/transport/chttp2/transport/parsing.cc +44 -0
  68. data/src/core/ext/transport/chttp2/transport/writing.cc +3 -14
  69. data/src/core/ext/transport/inproc/inproc_transport.cc +1 -3
  70. data/src/core/ext/xds/certificate_provider_store.cc +63 -3
  71. data/src/core/ext/xds/certificate_provider_store.h +9 -1
  72. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +5 -5
  73. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +1 -1
  74. data/src/core/ext/xds/xds_api.cc +21 -17
  75. data/src/core/ext/xds/xds_api.h +7 -0
  76. data/src/core/ext/xds/xds_bootstrap.cc +5 -537
  77. data/src/core/ext/xds/xds_bootstrap.h +39 -111
  78. data/src/core/ext/xds/xds_bootstrap_grpc.cc +370 -0
  79. data/src/core/ext/xds/xds_bootstrap_grpc.h +169 -0
  80. data/src/core/ext/xds/xds_client.cc +219 -145
  81. data/src/core/ext/xds/xds_client.h +19 -17
  82. data/src/core/ext/xds/xds_client_grpc.cc +18 -80
  83. data/src/core/ext/xds/xds_client_grpc.h +2 -25
  84. data/src/core/ext/xds/xds_client_stats.cc +4 -4
  85. data/src/core/ext/xds/xds_cluster.cc +87 -79
  86. data/src/core/ext/xds/xds_cluster.h +5 -5
  87. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +3 -1
  88. data/src/core/ext/xds/xds_common_types.cc +13 -5
  89. data/src/core/ext/xds/xds_endpoint.cc +8 -6
  90. data/src/core/ext/xds/xds_endpoint.h +3 -4
  91. data/src/core/ext/xds/xds_lb_policy_registry.cc +4 -2
  92. data/src/core/ext/xds/xds_listener.cc +25 -20
  93. data/src/core/ext/xds/xds_listener.h +3 -4
  94. data/src/core/ext/xds/xds_resource_type.h +11 -8
  95. data/src/core/ext/xds/xds_route_config.cc +15 -16
  96. data/src/core/ext/xds/xds_route_config.h +3 -3
  97. data/src/core/ext/xds/xds_server_config_fetcher.cc +7 -5
  98. data/src/core/ext/xds/xds_transport_grpc.cc +15 -7
  99. data/src/core/lib/backoff/backoff.cc +2 -4
  100. data/src/core/lib/channel/call_finalization.h +1 -3
  101. data/src/core/lib/channel/channel_args.h +114 -14
  102. data/src/core/lib/channel/channel_trace.cc +3 -4
  103. data/src/core/lib/channel/promise_based_filter.cc +18 -19
  104. data/src/core/lib/channel/status_util.cc +27 -0
  105. data/src/core/lib/channel/status_util.h +10 -0
  106. data/src/core/lib/config/core_configuration.cc +5 -1
  107. data/src/core/lib/config/core_configuration.h +33 -0
  108. data/src/core/lib/debug/stats.cc +26 -30
  109. data/src/core/lib/debug/stats.h +2 -12
  110. data/src/core/lib/debug/stats_data.cc +118 -614
  111. data/src/core/lib/debug/stats_data.h +67 -465
  112. data/src/core/lib/debug/trace.cc +0 -2
  113. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +12 -20
  114. data/src/core/lib/event_engine/channel_args_endpoint_config.h +13 -7
  115. data/src/core/lib/event_engine/forkable.cc +1 -1
  116. data/src/core/lib/event_engine/poller.h +14 -12
  117. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +53 -32
  118. data/src/core/lib/event_engine/posix_engine/timer_manager.h +23 -1
  119. data/src/core/lib/event_engine/thread_pool.cc +131 -94
  120. data/src/core/lib/event_engine/thread_pool.h +56 -23
  121. data/src/core/lib/event_engine/time_util.cc +30 -0
  122. data/src/core/lib/event_engine/time_util.h +32 -0
  123. data/src/core/lib/event_engine/utils.cc +0 -5
  124. data/src/core/lib/event_engine/utils.h +0 -4
  125. data/src/core/lib/event_engine/windows/iocp.cc +13 -7
  126. data/src/core/lib/event_engine/windows/iocp.h +2 -1
  127. data/src/core/lib/event_engine/windows/win_socket.cc +1 -1
  128. data/src/core/lib/experiments/config.cc +146 -0
  129. data/src/core/lib/experiments/config.h +43 -0
  130. data/src/core/lib/experiments/experiments.cc +75 -0
  131. data/src/core/lib/experiments/experiments.h +56 -0
  132. data/src/core/lib/gpr/alloc.cc +1 -9
  133. data/src/core/lib/gpr/log_windows.cc +0 -1
  134. data/src/core/lib/gpr/string_util_windows.cc +3 -30
  135. data/src/core/lib/gpr/sync_abseil.cc +0 -14
  136. data/src/core/lib/gpr/sync_posix.cc +0 -14
  137. data/src/core/lib/gpr/time_posix.cc +0 -6
  138. data/src/core/lib/gpr/time_precise.h +1 -1
  139. data/src/core/lib/gpr/tmpfile_windows.cc +5 -7
  140. data/src/core/lib/gpr/useful.h +11 -0
  141. data/src/core/lib/{gpr → gprpp}/env.h +25 -12
  142. data/src/core/lib/{gpr → gprpp}/env_linux.cc +20 -15
  143. data/src/core/lib/{gpr → gprpp}/env_posix.cc +11 -10
  144. data/src/core/lib/gprpp/env_windows.cc +56 -0
  145. data/src/core/lib/gprpp/fork.cc +14 -22
  146. data/src/core/lib/gprpp/fork.h +0 -8
  147. data/src/core/lib/gprpp/global_config_env.cc +7 -6
  148. data/src/core/lib/gprpp/notification.h +67 -0
  149. data/src/core/lib/gprpp/packed_table.h +40 -0
  150. data/src/core/lib/gprpp/ref_counted_ptr.h +20 -33
  151. data/src/core/lib/gprpp/sorted_pack.h +98 -0
  152. data/src/core/lib/gprpp/status_helper.h +6 -0
  153. data/src/core/lib/gprpp/table.h +9 -1
  154. data/src/core/lib/gprpp/tchar.cc +49 -0
  155. data/src/core/lib/gprpp/tchar.h +33 -0
  156. data/src/core/lib/gprpp/time.cc +21 -0
  157. data/src/core/lib/gprpp/time.h +55 -0
  158. data/src/core/lib/gprpp/validation_errors.cc +61 -0
  159. data/src/core/lib/gprpp/validation_errors.h +110 -0
  160. data/src/core/{ext/filters/client_channel → lib/handshaker}/proxy_mapper.h +3 -3
  161. data/src/core/{ext/filters/client_channel → lib/handshaker}/proxy_mapper_registry.cc +14 -36
  162. data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
  163. data/src/core/lib/iomgr/call_combiner.cc +0 -8
  164. data/src/core/lib/iomgr/closure.h +0 -1
  165. data/src/core/lib/iomgr/endpoint_pair_posix.cc +14 -10
  166. data/src/core/lib/iomgr/endpoint_pair_windows.cc +2 -2
  167. data/src/core/lib/iomgr/ev_epoll1_linux.cc +1 -38
  168. data/src/core/lib/iomgr/ev_poll_posix.cc +2 -17
  169. data/src/core/lib/iomgr/exec_ctx.cc +0 -10
  170. data/src/core/lib/iomgr/exec_ctx.h +7 -31
  171. data/src/core/lib/iomgr/iocp_windows.cc +1 -2
  172. data/src/core/lib/iomgr/iomgr.cc +6 -8
  173. data/src/core/lib/iomgr/iomgr_fwd.h +1 -0
  174. data/src/core/lib/iomgr/pollset.h +1 -1
  175. data/src/core/lib/iomgr/pollset_set.h +0 -1
  176. data/src/core/lib/iomgr/resolve_address.h +1 -0
  177. data/src/core/lib/iomgr/resolve_address_impl.h +1 -0
  178. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -0
  179. data/src/core/lib/iomgr/resolve_address_windows.cc +1 -0
  180. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +2 -1
  181. data/src/core/lib/iomgr/socket_utils_common_posix.cc +12 -34
  182. data/src/core/lib/iomgr/socket_utils_posix.cc +83 -1
  183. data/src/core/lib/iomgr/socket_utils_posix.h +98 -6
  184. data/src/core/lib/iomgr/tcp_client.cc +6 -7
  185. data/src/core/lib/iomgr/tcp_client.h +11 -11
  186. data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -6
  187. data/src/core/lib/iomgr/tcp_client_posix.cc +33 -29
  188. data/src/core/lib/iomgr/tcp_client_posix.h +12 -9
  189. data/src/core/lib/iomgr/tcp_client_windows.cc +6 -6
  190. data/src/core/lib/iomgr/tcp_posix.cc +131 -114
  191. data/src/core/lib/iomgr/tcp_posix.h +3 -1
  192. data/src/core/lib/iomgr/tcp_server.cc +5 -4
  193. data/src/core/lib/iomgr/tcp_server.h +9 -6
  194. data/src/core/lib/iomgr/tcp_server_posix.cc +17 -28
  195. data/src/core/lib/iomgr/tcp_server_utils_posix.h +2 -2
  196. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +3 -3
  197. data/src/core/lib/iomgr/tcp_server_windows.cc +6 -7
  198. data/src/core/lib/iomgr/tcp_windows.cc +0 -1
  199. data/src/core/lib/iomgr/tcp_windows.h +0 -1
  200. data/src/core/lib/iomgr/timer_generic.cc +4 -4
  201. data/src/core/lib/iomgr/timer_manager.cc +1 -2
  202. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +0 -2
  203. data/src/core/lib/json/json_object_loader.cc +21 -52
  204. data/src/core/lib/json/json_object_loader.h +56 -76
  205. data/src/core/lib/json/json_util.cc +2 -1
  206. data/src/core/lib/load_balancing/lb_policy.h +5 -5
  207. data/src/core/lib/load_balancing/lb_policy_registry.cc +29 -55
  208. data/src/core/lib/load_balancing/lb_policy_registry.h +23 -11
  209. data/src/core/lib/promise/activity.h +2 -3
  210. data/src/core/lib/promise/context.h +1 -1
  211. data/src/core/lib/promise/sleep.cc +16 -4
  212. data/src/core/lib/promise/sleep.h +8 -2
  213. data/src/core/lib/resolver/resolver.h +13 -3
  214. data/src/core/lib/resource_quota/api.cc +9 -0
  215. data/src/core/lib/resource_quota/api.h +6 -0
  216. data/src/core/lib/resource_quota/arena.cc +1 -3
  217. data/src/core/lib/resource_quota/memory_quota.cc +8 -24
  218. data/src/core/lib/resource_quota/memory_quota.h +6 -19
  219. data/src/core/lib/resource_quota/periodic_update.cc +2 -3
  220. data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +3 -3
  221. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
  222. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
  223. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +1 -0
  224. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +15 -16
  225. data/src/core/lib/security/credentials/external/external_account_credentials.cc +2 -1
  226. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +5 -8
  227. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +6 -6
  228. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +3 -2
  229. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +1 -1
  230. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -2
  231. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +4 -3
  232. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +4 -2
  233. data/src/core/lib/security/credentials/tls/tls_utils.cc +3 -1
  234. data/src/core/lib/security/transport/client_auth_filter.cc +12 -1
  235. data/src/core/lib/security/transport/secure_endpoint.cc +0 -4
  236. data/src/core/lib/surface/call.cc +1 -11
  237. data/src/core/lib/surface/channel.cc +3 -2
  238. data/src/core/lib/surface/completion_queue.cc +16 -28
  239. data/src/core/lib/surface/completion_queue.h +1 -1
  240. data/src/core/lib/surface/completion_queue_factory.cc +5 -0
  241. data/src/core/lib/surface/init.cc +16 -11
  242. data/src/core/lib/surface/init_internally.cc +24 -0
  243. data/src/core/lib/surface/init_internally.h +28 -0
  244. data/src/core/lib/surface/server.cc +1 -7
  245. data/src/core/lib/surface/server.h +4 -6
  246. data/src/core/lib/surface/version.cc +2 -2
  247. data/src/core/lib/transport/bdp_estimator.cc +1 -3
  248. data/src/core/lib/transport/metadata_batch.cc +2 -3
  249. data/src/core/lib/transport/metadata_batch.h +9 -7
  250. data/src/core/lib/transport/parsed_metadata.h +4 -2
  251. data/src/core/lib/transport/status_conversion.cc +1 -3
  252. data/src/core/lib/transport/tcp_connect_handshaker.cc +9 -5
  253. data/src/core/lib/transport/transport.h +0 -1
  254. data/src/core/lib/transport/transport_impl.h +0 -1
  255. data/src/core/plugin_registry/grpc_plugin_registry.cc +23 -46
  256. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +13 -25
  257. data/src/ruby/lib/grpc/version.rb +1 -1
  258. data/src/ruby/spec/channel_spec.rb +5 -0
  259. data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
  260. data/src/ruby/spec/user_agent_spec.rb +1 -1
  261. metadata +33 -19
  262. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -56
  263. data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
  264. data/src/core/ext/xds/certificate_provider_registry.h +0 -59
  265. data/src/core/lib/event_engine/promise.h +0 -78
  266. data/src/core/lib/gpr/env_windows.cc +0 -74
  267. data/src/core/lib/gpr/string_windows.h +0 -32
  268. data/src/core/lib/profiling/basic_timers.cc +0 -295
  269. data/src/core/lib/profiling/stap_timers.cc +0 -50
  270. data/src/core/lib/profiling/timers.h +0 -94
@@ -167,7 +167,7 @@ void MaxAgeFilter::PostInit() {
167
167
  max_age_activity_.Set(MakeActivity(
168
168
  TrySeq(
169
169
  // First sleep until the max connection age
170
- Sleep(ExecCtx::Get()->Now() + max_connection_age_),
170
+ Sleep(Timestamp::Now() + max_connection_age_),
171
171
  // Then send a goaway.
172
172
  [this] {
173
173
  GRPC_CHANNEL_STACK_REF(this->channel_stack(),
@@ -192,7 +192,7 @@ void MaxAgeFilter::PostInit() {
192
192
  },
193
193
  // Sleep for the grace period
194
194
  [this] {
195
- return Sleep(ExecCtx::Get()->Now() + max_connection_age_grace_);
195
+ return Sleep(Timestamp::Now() + max_connection_age_grace_);
196
196
  }),
197
197
  ExecCtxWakeupScheduler(), [channel_stack, this](absl::Status status) {
198
198
  // OnDone -- close the connection if the promise completed
@@ -246,7 +246,7 @@ void ChannelIdleFilter::StartIdleTimer() {
246
246
  auto channel_stack = channel_stack_->Ref();
247
247
  auto timeout = client_idle_timeout_;
248
248
  auto promise = Loop([timeout, idle_filter_state]() {
249
- return TrySeq(Sleep(ExecCtx::Get()->Now() + timeout),
249
+ return TrySeq(Sleep(Timestamp::Now() + timeout),
250
250
  [idle_filter_state]() -> Poll<LoopCtl<absl::Status>> {
251
251
  if (idle_filter_state->CheckTimer()) {
252
252
  return Continue{};
@@ -33,7 +33,6 @@
33
33
  #include "src/core/lib/gprpp/time.h"
34
34
  #include "src/core/lib/iomgr/closure.h"
35
35
  #include "src/core/lib/iomgr/error.h"
36
- #include "src/core/lib/iomgr/exec_ctx.h"
37
36
  #include "src/core/lib/iomgr/iomgr.h"
38
37
  #include "src/core/lib/iomgr/pollset.h"
39
38
  #include "src/core/lib/iomgr/pollset_set.h"
@@ -54,7 +53,6 @@ struct backup_poller {
54
53
  };
55
54
  } // namespace
56
55
 
57
- static gpr_once g_once = GPR_ONCE_INIT;
58
56
  static gpr_mu g_poller_mu;
59
57
  static backup_poller* g_poller = nullptr; // guarded by g_poller_mu
60
58
  // g_poll_interval_ms is set only once at the first time
@@ -73,7 +71,7 @@ GPR_GLOBAL_CONFIG_DEFINE_INT32(
73
71
  "turn off the backup polls.");
74
72
 
75
73
  void grpc_client_channel_global_init_backup_polling() {
76
- gpr_once_init(&g_once, [] { gpr_mu_init(&g_poller_mu); });
74
+ gpr_mu_init(&g_poller_mu);
77
75
  int32_t poll_interval_ms =
78
76
  GPR_GLOBAL_CONFIG_GET(grpc_client_channel_backup_poll_interval_ms);
79
77
  if (poll_interval_ms < 0) {
@@ -133,11 +131,11 @@ static void run_poller(void* arg, grpc_error_handle error) {
133
131
  return;
134
132
  }
135
133
  grpc_error_handle err =
136
- grpc_pollset_work(p->pollset, nullptr, grpc_core::ExecCtx::Get()->Now());
134
+ grpc_pollset_work(p->pollset, nullptr, grpc_core::Timestamp::Now());
137
135
  gpr_mu_unlock(p->pollset_mu);
138
136
  GRPC_LOG_IF_ERROR("Run client channel backup poller", err);
139
137
  grpc_timer_init(&p->polling_timer,
140
- grpc_core::ExecCtx::Get()->Now() + g_poll_interval,
138
+ grpc_core::Timestamp::Now() + g_poll_interval,
141
139
  &p->run_poller_closure);
142
140
  }
143
141
 
@@ -154,7 +152,7 @@ static void g_poller_init_locked() {
154
152
  GRPC_CLOSURE_INIT(&g_poller->run_poller_closure, run_poller, g_poller,
155
153
  grpc_schedule_on_exec_ctx);
156
154
  grpc_timer_init(&g_poller->polling_timer,
157
- grpc_core::ExecCtx::Get()->Now() + g_poll_interval,
155
+ grpc_core::Timestamp::Now() + g_poll_interval,
158
156
  &g_poller->run_poller_closure);
159
157
  }
160
158
  }
@@ -52,7 +52,6 @@
52
52
  #include "src/core/ext/filters/client_channel/global_subchannel_pool.h"
53
53
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
54
54
  #include "src/core/ext/filters/client_channel/local_subchannel_pool.h"
55
- #include "src/core/ext/filters/client_channel/proxy_mapper_registry.h"
56
55
  #include "src/core/ext/filters/client_channel/resolver_result_parsing.h"
57
56
  #include "src/core/ext/filters/client_channel/retry_filter.h"
58
57
  #include "src/core/ext/filters/client_channel/subchannel.h"
@@ -61,19 +60,20 @@
61
60
  #include "src/core/lib/channel/channel_args.h"
62
61
  #include "src/core/lib/channel/channel_stack.h"
63
62
  #include "src/core/lib/channel/channel_trace.h"
63
+ #include "src/core/lib/channel/status_util.h"
64
64
  #include "src/core/lib/config/core_configuration.h"
65
65
  #include "src/core/lib/debug/trace.h"
66
66
  #include "src/core/lib/gpr/useful.h"
67
67
  #include "src/core/lib/gprpp/debug_location.h"
68
68
  #include "src/core/lib/gprpp/sync.h"
69
69
  #include "src/core/lib/gprpp/work_serializer.h"
70
+ #include "src/core/lib/handshaker/proxy_mapper_registry.h"
70
71
  #include "src/core/lib/iomgr/exec_ctx.h"
71
72
  #include "src/core/lib/iomgr/polling_entity.h"
72
73
  #include "src/core/lib/iomgr/pollset_set.h"
73
74
  #include "src/core/lib/json/json.h"
74
75
  #include "src/core/lib/load_balancing/lb_policy_registry.h"
75
76
  #include "src/core/lib/load_balancing/subchannel_interface.h"
76
- #include "src/core/lib/profiling/timers.h"
77
77
  #include "src/core/lib/resolver/resolver_registry.h"
78
78
  #include "src/core/lib/resolver/server_address.h"
79
79
  #include "src/core/lib/service_config/service_config_call_data.h"
@@ -1023,7 +1023,9 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
1023
1023
  "filter");
1024
1024
  return;
1025
1025
  }
1026
- uri_to_resolve_ = ProxyMapperRegistry::MapName(*server_uri, &channel_args_)
1026
+ uri_to_resolve_ = CoreConfiguration::Get()
1027
+ .proxy_mapper_registry()
1028
+ .MapName(*server_uri, &channel_args_)
1027
1029
  .value_or(*server_uri);
1028
1030
  // Make sure the URI to resolve is valid, so that we know that
1029
1031
  // resolver creation will succeed later.
@@ -1120,8 +1122,9 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
1120
1122
  policy_name = resolver_result.args.GetString(GRPC_ARG_LB_POLICY_NAME);
1121
1123
  bool requires_config = false;
1122
1124
  if (policy_name.has_value() &&
1123
- (!LoadBalancingPolicyRegistry::LoadBalancingPolicyExists(
1124
- *policy_name, &requires_config) ||
1125
+ (!CoreConfiguration::Get()
1126
+ .lb_policy_registry()
1127
+ .LoadBalancingPolicyExists(*policy_name, &requires_config) ||
1125
1128
  requires_config)) {
1126
1129
  if (requires_config) {
1127
1130
  gpr_log(GPR_ERROR,
@@ -1145,7 +1148,8 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
1145
1148
  {std::string(*policy_name), Json::Object{}},
1146
1149
  }};
1147
1150
  auto lb_policy_config =
1148
- LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(config_json);
1151
+ CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig(
1152
+ config_json);
1149
1153
  // The policy name came from one of three places:
1150
1154
  // - The deprecated loadBalancingPolicy field in the service config,
1151
1155
  // in which case the code in ClientChannelServiceConfigParser
@@ -1167,6 +1171,9 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1167
1171
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1168
1172
  gpr_log(GPR_INFO, "chand=%p: got resolver result", this);
1169
1173
  }
1174
+ // Grab resolver result health callback.
1175
+ auto resolver_callback = std::move(result.result_health_callback);
1176
+ absl::Status resolver_result_status;
1170
1177
  // We only want to trace the address resolution in the follow cases:
1171
1178
  // (a) Address resolution resulted in service config change.
1172
1179
  // (b) Address resolution that causes number of backends to go from
@@ -1218,6 +1225,8 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1218
1225
  // TRANSIENT_FAILURE.
1219
1226
  OnResolverErrorLocked(result.service_config.status());
1220
1227
  trace_strings.push_back("no valid service config");
1228
+ resolver_result_status =
1229
+ absl::UnavailableError("no valid service config");
1221
1230
  }
1222
1231
  } else if (*result.service_config == nullptr) {
1223
1232
  // Resolver did not return any service config.
@@ -1262,7 +1271,7 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1262
1271
  gpr_log(GPR_INFO, "chand=%p: service config not changed", this);
1263
1272
  }
1264
1273
  // Create or update LB policy, as needed.
1265
- CreateOrUpdateLbPolicyLocked(
1274
+ resolver_result_status = CreateOrUpdateLbPolicyLocked(
1266
1275
  std::move(lb_policy_config),
1267
1276
  parsed_service_config->health_check_service_name(), std::move(result));
1268
1277
  if (service_config_changed || config_selector_changed) {
@@ -1276,6 +1285,10 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1276
1285
  trace_strings.push_back("Service config changed");
1277
1286
  }
1278
1287
  }
1288
+ // Invoke resolver callback if needed.
1289
+ if (resolver_callback != nullptr) {
1290
+ resolver_callback(std::move(resolver_result_status));
1291
+ }
1279
1292
  // Add channel trace event.
1280
1293
  if (!trace_strings.empty()) {
1281
1294
  std::string message =
@@ -1301,7 +1314,8 @@ void ClientChannel::OnResolverErrorLocked(absl::Status status) {
1301
1314
  {
1302
1315
  MutexLock lock(&resolution_mu_);
1303
1316
  // Update resolver transient failure.
1304
- resolver_transient_failure_error_ = status;
1317
+ resolver_transient_failure_error_ =
1318
+ MaybeRewriteIllegalStatusCode(status, "resolver");
1305
1319
  // Process calls that were queued waiting for the resolver result.
1306
1320
  for (ResolverQueuedCall* call = resolver_queued_calls_; call != nullptr;
1307
1321
  call = call->next) {
@@ -1321,7 +1335,7 @@ void ClientChannel::OnResolverErrorLocked(absl::Status status) {
1321
1335
  }
1322
1336
  }
1323
1337
 
1324
- void ClientChannel::CreateOrUpdateLbPolicyLocked(
1338
+ absl::Status ClientChannel::CreateOrUpdateLbPolicyLocked(
1325
1339
  RefCountedPtr<LoadBalancingPolicy::Config> lb_policy_config,
1326
1340
  const absl::optional<std::string>& health_check_service_name,
1327
1341
  Resolver::Result result) {
@@ -1348,7 +1362,7 @@ void ClientChannel::CreateOrUpdateLbPolicyLocked(
1348
1362
  gpr_log(GPR_INFO, "chand=%p: Updating child policy %p", this,
1349
1363
  lb_policy_.get());
1350
1364
  }
1351
- lb_policy_->UpdateLocked(std::move(update_args));
1365
+ return lb_policy_->UpdateLocked(std::move(update_args));
1352
1366
  }
1353
1367
 
1354
1368
  // Creates a new LB policy.
@@ -1400,8 +1414,7 @@ void ClientChannel::UpdateServiceConfigInControlPlaneLocked(
1400
1414
  RefCountedPtr<ConfigSelector> config_selector, std::string lb_policy_name) {
1401
1415
  std::string service_config_json(service_config->json_string());
1402
1416
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1403
- gpr_log(GPR_INFO,
1404
- "chand=%p: resolver returned updated service config: \"%s\"", this,
1417
+ gpr_log(GPR_INFO, "chand=%p: using service config: \"%s\"", this,
1405
1418
  service_config_json.c_str());
1406
1419
  }
1407
1420
  // Save service config.
@@ -1860,7 +1873,6 @@ void ClientChannel::CallData::Destroy(
1860
1873
 
1861
1874
  void ClientChannel::CallData::StartTransportStreamOpBatch(
1862
1875
  grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
1863
- GPR_TIMER_SCOPE("cc_start_transport_stream_op_batch", 0);
1864
1876
  CallData* calld = static_cast<CallData*>(elem->call_data);
1865
1877
  ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
1866
1878
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace) &&
@@ -2173,7 +2185,8 @@ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
2173
2185
  ConfigSelector::CallConfig call_config =
2174
2186
  config_selector->GetCallConfig({&path_, initial_metadata, arena_});
2175
2187
  if (!call_config.status.ok()) {
2176
- return absl_status_to_grpc_error(call_config.status);
2188
+ return absl_status_to_grpc_error(MaybeRewriteIllegalStatusCode(
2189
+ std::move(call_config.status), "ConfigSelector"));
2177
2190
  }
2178
2191
  // Create a ClientChannelServiceConfigCallData for the call. This stores
2179
2192
  // a ref to the ServiceConfig and caches the right set of parsed configs
@@ -3166,11 +3179,8 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3166
3179
  // attempt's final status.
3167
3180
  if (!initial_metadata_batch->GetOrCreatePointer(WaitForReady())
3168
3181
  ->value) {
3169
- grpc_error_handle lb_error =
3170
- absl_status_to_grpc_error(fail_pick->status);
3171
- *error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
3172
- "Failed to pick subchannel", &lb_error, 1);
3173
- GRPC_ERROR_UNREF(lb_error);
3182
+ *error = absl_status_to_grpc_error(MaybeRewriteIllegalStatusCode(
3183
+ std::move(fail_pick->status), "LB pick"));
3174
3184
  MaybeRemoveCallFromLbQueuedCallsLocked();
3175
3185
  return true;
3176
3186
  }
@@ -3186,9 +3196,10 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3186
3196
  gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick dropped: %s",
3187
3197
  chand_, this, drop_pick->status.ToString().c_str());
3188
3198
  }
3189
- *error =
3190
- grpc_error_set_int(absl_status_to_grpc_error(drop_pick->status),
3191
- GRPC_ERROR_INT_LB_POLICY_DROP, 1);
3199
+ *error = grpc_error_set_int(
3200
+ absl_status_to_grpc_error(MaybeRewriteIllegalStatusCode(
3201
+ std::move(drop_pick->status), "LB drop")),
3202
+ GRPC_ERROR_INT_LB_POLICY_DROP, 1);
3192
3203
  MaybeRemoveCallFromLbQueuedCallsLocked();
3193
3204
  return true;
3194
3205
  });
@@ -250,7 +250,7 @@ class ClientChannel {
250
250
  void OnResolverErrorLocked(absl::Status status)
251
251
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*work_serializer_);
252
252
 
253
- void CreateOrUpdateLbPolicyLocked(
253
+ absl::Status CreateOrUpdateLbPolicyLocked(
254
254
  RefCountedPtr<LoadBalancingPolicy::Config> lb_policy_config,
255
255
  const absl::optional<std::string>& health_check_service_name,
256
256
  Resolver::Result result) ABSL_EXCLUSIVE_LOCKS_REQUIRED(*work_serializer_);
@@ -18,30 +18,14 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
- #include "src/core/ext/filters/client_channel/backup_poller.h"
22
21
  #include "src/core/ext/filters/client_channel/client_channel.h"
23
- #include "src/core/ext/filters/client_channel/http_proxy.h"
24
- #include "src/core/ext/filters/client_channel/proxy_mapper_registry.h"
25
22
  #include "src/core/ext/filters/client_channel/resolver_result_parsing.h"
26
23
  #include "src/core/ext/filters/client_channel/retry_service_config.h"
27
24
  #include "src/core/lib/channel/channel_stack_builder.h"
28
25
  #include "src/core/lib/config/core_configuration.h"
29
- #include "src/core/lib/load_balancing/lb_policy_registry.h"
30
26
  #include "src/core/lib/surface/channel_init.h"
31
27
  #include "src/core/lib/surface/channel_stack_type.h"
32
28
 
33
- void grpc_client_channel_init(void) {
34
- grpc_core::LoadBalancingPolicyRegistry::Builder::InitRegistry();
35
- grpc_core::ProxyMapperRegistry::Init();
36
- grpc_core::RegisterHttpProxyMapper();
37
- grpc_client_channel_global_init_backup_polling();
38
- }
39
-
40
- void grpc_client_channel_shutdown(void) {
41
- grpc_core::ProxyMapperRegistry::Shutdown();
42
- grpc_core::LoadBalancingPolicyRegistry::Builder::ShutdownRegistry();
43
- }
44
-
45
29
  namespace grpc_core {
46
30
 
47
31
  void BuildClientChannelConfiguration(CoreConfiguration::Builder* builder) {
@@ -39,12 +39,12 @@
39
39
  #include <grpc/support/alloc.h>
40
40
  #include <grpc/support/log.h>
41
41
 
42
- #include "src/core/ext/filters/client_channel/proxy_mapper_registry.h"
43
42
  #include "src/core/lib/channel/channel_args.h"
44
- #include "src/core/lib/gpr/env.h"
45
43
  #include "src/core/lib/gpr/string.h"
44
+ #include "src/core/lib/gprpp/env.h"
46
45
  #include "src/core/lib/gprpp/host_port.h"
47
46
  #include "src/core/lib/gprpp/memory.h"
47
+ #include "src/core/lib/handshaker/proxy_mapper_registry.h"
48
48
  #include "src/core/lib/iomgr/resolve_address.h"
49
49
  #include "src/core/lib/slice/b64.h"
50
50
  #include "src/core/lib/transport/http_connect_handshaker.h"
@@ -73,16 +73,9 @@ absl::optional<std::string> GetHttpProxyServer(
73
73
  */
74
74
  absl::optional<std::string> uri_str =
75
75
  args.GetOwnedString(GRPC_ARG_HTTP_PROXY);
76
- auto get_env = [](const char* name) -> absl::optional<std::string> {
77
- char* v = gpr_getenv(name);
78
- if (v == nullptr) return absl::nullopt;
79
- std::string s(v);
80
- gpr_free(v);
81
- return s;
82
- };
83
- if (!uri_str.has_value()) uri_str = get_env("grpc_proxy");
84
- if (!uri_str.has_value()) uri_str = get_env("https_proxy");
85
- if (!uri_str.has_value()) uri_str = get_env("http_proxy");
76
+ if (!uri_str.has_value()) uri_str = GetEnv("grpc_proxy");
77
+ if (!uri_str.has_value()) uri_str = GetEnv("https_proxy");
78
+ if (!uri_str.has_value()) uri_str = GetEnv("http_proxy");
86
79
  if (!uri_str.has_value()) return absl::nullopt;
87
80
  // an emtpy value means "don't use proxy"
88
81
  if (uri_str->empty()) return absl::nullopt;
@@ -158,11 +151,11 @@ absl::optional<std::string> HttpProxyMapper::MapName(
158
151
  return absl::nullopt;
159
152
  }
160
153
  /* Prefer using 'no_grpc_proxy'. Fallback on 'no_proxy' if it is not set. */
161
- auto no_proxy_str = UniquePtr<char>(gpr_getenv("no_grpc_proxy"));
162
- if (no_proxy_str == nullptr) {
163
- no_proxy_str = UniquePtr<char>(gpr_getenv("no_proxy"));
154
+ auto no_proxy_str = GetEnv("no_grpc_proxy");
155
+ if (!no_proxy_str.has_value()) {
156
+ no_proxy_str = GetEnv("no_proxy");
164
157
  }
165
- if (no_proxy_str != nullptr) {
158
+ if (no_proxy_str.has_value()) {
166
159
  bool use_proxy = true;
167
160
  std::string server_host;
168
161
  std::string server_port;
@@ -174,7 +167,7 @@ absl::optional<std::string> HttpProxyMapper::MapName(
174
167
  std::string(server_uri).c_str());
175
168
  } else {
176
169
  std::vector<absl::string_view> no_proxy_hosts =
177
- absl::StrSplit(no_proxy_str.get(), ',', absl::SkipEmpty());
170
+ absl::StrSplit(*no_proxy_str, ',', absl::SkipEmpty());
178
171
  for (const auto& no_proxy_entry : no_proxy_hosts) {
179
172
  if (absl::EndsWithIgnoreCase(server_host, no_proxy_entry)) {
180
173
  gpr_log(GPR_INFO, "not using proxy for host in no_proxy list '%s'",
@@ -199,8 +192,8 @@ absl::optional<std::string> HttpProxyMapper::MapName(
199
192
  return name_to_resolve;
200
193
  }
201
194
 
202
- void RegisterHttpProxyMapper() {
203
- ProxyMapperRegistry::Register(
195
+ void RegisterHttpProxyMapper(CoreConfiguration::Builder* builder) {
196
+ builder->proxy_mapper_registry()->Register(
204
197
  true /* at_start */,
205
198
  std::unique_ptr<ProxyMapperInterface>(new HttpProxyMapper()));
206
199
  }
@@ -26,8 +26,9 @@
26
26
  #include "absl/strings/string_view.h"
27
27
  #include "absl/types/optional.h"
28
28
 
29
- #include "src/core/ext/filters/client_channel/proxy_mapper.h"
30
29
  #include "src/core/lib/channel/channel_args.h"
30
+ #include "src/core/lib/config/core_configuration.h"
31
+ #include "src/core/lib/handshaker/proxy_mapper.h"
31
32
  #include "src/core/lib/iomgr/resolved_address.h"
32
33
 
33
34
  namespace grpc_core {
@@ -44,7 +45,7 @@ class HttpProxyMapper : public ProxyMapperInterface {
44
45
  }
45
46
  };
46
47
 
47
- void RegisterHttpProxyMapper();
48
+ void RegisterHttpProxyMapper(CoreConfiguration::Builder* builder);
48
49
 
49
50
  } // namespace grpc_core
50
51
 
@@ -29,6 +29,7 @@
29
29
  #include <grpc/support/log.h>
30
30
 
31
31
  #include "src/core/lib/channel/channel_args.h"
32
+ #include "src/core/lib/config/core_configuration.h"
32
33
  #include "src/core/lib/gprpp/debug_location.h"
33
34
  #include "src/core/lib/iomgr/pollset_set.h"
34
35
  #include "src/core/lib/load_balancing/lb_policy_registry.h"
@@ -160,7 +161,7 @@ void ChildPolicyHandler::ShutdownLocked() {
160
161
  }
161
162
  }
162
163
 
163
- void ChildPolicyHandler::UpdateLocked(UpdateArgs args) {
164
+ absl::Status ChildPolicyHandler::UpdateLocked(UpdateArgs args) {
164
165
  // If the child policy name changes, we need to create a new child
165
166
  // policy. When this happens, we leave child_policy_ as-is and store
166
167
  // the new child policy in pending_child_policy_. Once the new child
@@ -252,7 +253,7 @@ void ChildPolicyHandler::UpdateLocked(UpdateArgs args) {
252
253
  policy_to_update == pending_child_policy_.get() ? "pending " : "",
253
254
  policy_to_update);
254
255
  }
255
- policy_to_update->UpdateLocked(std::move(args));
256
+ return policy_to_update->UpdateLocked(std::move(args));
256
257
  }
257
258
 
258
259
  void ChildPolicyHandler::ExitIdleLocked() {
@@ -311,8 +312,9 @@ bool ChildPolicyHandler::ConfigChangeRequiresNewPolicyInstance(
311
312
  OrphanablePtr<LoadBalancingPolicy>
312
313
  ChildPolicyHandler::CreateLoadBalancingPolicy(
313
314
  absl::string_view name, LoadBalancingPolicy::Args args) const {
314
- return LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy(
315
- name, std::move(args));
315
+ return CoreConfiguration::Get()
316
+ .lb_policy_registry()
317
+ .CreateLoadBalancingPolicy(name, std::move(args));
316
318
  }
317
319
 
318
320
  } // namespace grpc_core
@@ -20,6 +20,7 @@
20
20
 
21
21
  #include <utility>
22
22
 
23
+ #include "absl/status/status.h"
23
24
  #include "absl/strings/string_view.h"
24
25
 
25
26
  #include "src/core/lib/channel/channel_args.h"
@@ -33,9 +34,9 @@ namespace grpc_core {
33
34
  // A class that makes it easy to gracefully switch child policies.
34
35
  //
35
36
  // Callers should instantiate this instead of using
36
- // LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy(). Once
37
- // instantiated, this object will automatically take care of
38
- // constructing the child policy as needed upon receiving an update.
37
+ // CoreConfiguration::Get().lb_policy_registry().CreateLoadBalancingPolicy().
38
+ // Once instantiated, this object will automatically take care of constructing
39
+ // the child policy as needed upon receiving an update.
39
40
  class ChildPolicyHandler : public LoadBalancingPolicy {
40
41
  public:
41
42
  ChildPolicyHandler(Args args, TraceFlag* tracer)
@@ -43,7 +44,7 @@ class ChildPolicyHandler : public LoadBalancingPolicy {
43
44
 
44
45
  absl::string_view name() const override { return "child_policy_handler"; }
45
46
 
46
- void UpdateLocked(UpdateArgs args) override;
47
+ absl::Status UpdateLocked(UpdateArgs args) override;
47
48
  void ExitIdleLocked() override;
48
49
  void ResetBackoffLocked() override;
49
50
 
@@ -31,7 +31,6 @@
31
31
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
32
32
  #include "src/core/lib/iomgr/closure.h"
33
33
  #include "src/core/lib/iomgr/error.h"
34
- #include "src/core/lib/profiling/timers.h"
35
34
  #include "src/core/lib/transport/metadata_batch.h"
36
35
  #include "src/core/lib/transport/transport.h"
37
36
 
@@ -102,7 +101,6 @@ static void clr_destroy_call_elem(grpc_call_element* elem,
102
101
  static void clr_start_transport_stream_op_batch(
103
102
  grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
104
103
  call_data* calld = static_cast<call_data*>(elem->call_data);
105
- GPR_TIMER_SCOPE("clr_start_transport_stream_op_batch", 0);
106
104
  // Handle send_initial_metadata.
107
105
  if (batch->send_initial_metadata) {
108
106
  // Grab client stats object from metadata.