This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit ace657098bb11b8712defdfec8c8b09ca82967b4
Author: Marcin Grzejszczak <mgrzejszc...@vmware.com>
AuthorDate: Tue May 16 06:33:39 2023 +0200

    Upgrades micrometer (#10091)
---
 .../observation/MicrometerObservationTracer.java   | 27 ++++++++++++++++++----
 parent/pom.xml                                     |  4 ++--
 2 files changed, 25 insertions(+), 6 deletions(-)

diff --git 
a/components/camel-observation/src/main/java/org/apache/camel/observation/MicrometerObservationTracer.java
 
b/components/camel-observation/src/main/java/org/apache/camel/observation/MicrometerObservationTracer.java
index 5d10ac65780..e59fc859628 100644
--- 
a/components/camel-observation/src/main/java/org/apache/camel/observation/MicrometerObservationTracer.java
+++ 
b/components/camel-observation/src/main/java/org/apache/camel/observation/MicrometerObservationTracer.java
@@ -24,7 +24,9 @@ import io.micrometer.observation.transport.ReceiverContext;
 import io.micrometer.observation.transport.RequestReplyReceiverContext;
 import io.micrometer.observation.transport.RequestReplySenderContext;
 import io.micrometer.observation.transport.SenderContext;
+import io.micrometer.tracing.Span;
 import io.micrometer.tracing.Tracer;
+import io.micrometer.tracing.handler.TracingObservationHandler;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.api.management.ManagedResource;
@@ -130,15 +132,29 @@ public class MicrometerObservationTracer extends 
org.apache.camel.tracing.Tracer
 
     @Override
     protected SpanAdapter startSendingEventSpan(
-            String operationName, SpanKind kind, SpanAdapter 
parentObservation, Exchange exchange,
+            String operationName, SpanKind kind, SpanAdapter parent, Exchange 
exchange,
             InjectAdapter injectAdapter) {
         Observation.Context context = spanKindToContextOnInject(kind, 
injectAdapter, exchange);
         Observation observation = 
Observation.createNotStarted(CAMEL_CONTEXT_NAME, () -> context, 
observationRegistry);
         observation.contextualName(operationName);
-        if (parentObservation != null) {
-            
observation.parentObservation(getParentObservation(parentObservation));
+        Observation parentObservation = getParentObservation(parent);
+        Tracer.SpanInScope scope = null;
+        try {
+            if (parentObservation != 
observationRegistry.getCurrentObservation()) {
+                // Because Camel allows to close scopes multiple times
+                TracingObservationHandler.TracingContext tracingContext = 
parentObservation.getContextView().get(TracingObservationHandler.TracingContext.class);
+                Span parentSpan = tracingContext.getSpan();
+                scope = tracer.withSpan(parentSpan);
+            }
+            if (parentObservation != null) {
+                observation.parentObservation(parentObservation);
+            }
+            return new MicrometerObservationSpanAdapter(observation.start(), 
tracer);
+        } finally {
+            if (scope != null) {
+                scope.close();
+            }
         }
-        return new MicrometerObservationSpanAdapter(observation.start(), 
tracer);
     }
 
     @Override
@@ -147,6 +163,9 @@ public class MicrometerObservationTracer extends 
org.apache.camel.tracing.Tracer
     }
 
     private static Observation getParentObservation(SpanAdapter 
parentObservation) {
+        if (parentObservation == null) {
+            return null;
+        }
         MicrometerObservationSpanAdapter observationWrapper = 
(MicrometerObservationSpanAdapter) parentObservation;
         return observationWrapper.getMicrometerObservation();
     }
diff --git a/parent/pom.xml b/parent/pom.xml
index 5d1273d4931..7019d0b33bf 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -360,8 +360,8 @@
         <maven-wagon-version>3.5.2</maven-wagon-version>
         <maven-war-plugin-version>3.3.1</maven-war-plugin-version>
         <metrics-version>4.2.17</metrics-version>
-        <micrometer-version>1.10.6</micrometer-version>
-        <micrometer-tracing-version>1.0.4</micrometer-tracing-version>
+        <micrometer-version>1.10.7</micrometer-version>
+        <micrometer-tracing-version>1.0.6</micrometer-tracing-version>
         <microprofile-config-version>3.0.2</microprofile-config-version>
         
<microprofile-fault-tolerance-version>4.0.2</microprofile-fault-tolerance-version>
         <milo-version>0.6.8</milo-version>

Reply via email to