From a18c692b537f7accf06c0a7cd5abd842ce361219 Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Fri, 30 Sep 2022 23:12:53 +0200 Subject: [PATCH] Start RestTemplate observation wtih available request Prior to this commit, the `RestTemplate` `ClientHttpObservation` would be started before the request object is available. While this would also measure the connection estalishment for some HTTP client libraries, this arrangement is incompatible with a tracing approach where the request must be available to propagate information through the request headers. This commit ensures that the observation only starts when the request is available. Fixes gh-29234 --- .../ClientHttpObservationContext.java | 7 +++- .../web/client/RestTemplate.java | 29 +++++++++++----- ...tClientHttpObservationConventionTests.java | 34 ++++--------------- .../client/RestTemplateObservationTests.java | 18 ++++++++++ 4 files changed, 51 insertions(+), 37 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/http/client/observation/ClientHttpObservationContext.java b/spring-web/src/main/java/org/springframework/http/client/observation/ClientHttpObservationContext.java index ff22ee4609..d5957d1a54 100644 --- a/spring-web/src/main/java/org/springframework/http/client/observation/ClientHttpObservationContext.java +++ b/spring-web/src/main/java/org/springframework/http/client/observation/ClientHttpObservationContext.java @@ -36,8 +36,13 @@ public class ClientHttpObservationContext extends RequestReplySenderContext { + + @Override + public boolean supportsContext(Observation.Context context) { + return context instanceof ClientHttpObservationContext; + } + + @Override + public void onStart(ClientHttpObservationContext context) { + assertThat(context.getCarrier()).isNotNull(); + } + } + }