You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2013/12/12 14:22:17 UTC

[1/2] git commit: CAMEL-7062: Ensure tracer/debugger lifecycle is stopped when Camel stops. And fixed backloger tracer leak with keep references to processor defs which wasnt needed afterall.

Updated Branches:
  refs/heads/camel-2.12.x 710c86291 -> 93101ecbb
  refs/heads/master 2170352c3 -> 4f663169a


CAMEL-7062: Ensure tracer/debugger lifecycle is stopped when Camel stops. And fixed backloger tracer leak with keep references to processor defs which wasnt needed afterall.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/93101ecb
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/93101ecb
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/93101ecb

Branch: refs/heads/camel-2.12.x
Commit: 93101ecbb8cfea79a7c12d5062bfc83f2a24b901
Parents: 710c862
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Dec 12 13:19:21 2013 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Dec 12 13:47:59 2013 +0100

----------------------------------------------------------------------
 .../processor/interceptor/BacklogTracer.java    | 34 --------------------
 .../processor/interceptor/DefaultChannel.java   | 27 ++--------------
 2 files changed, 3 insertions(+), 58 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/93101ecb/camel-core/src/main/java/org/apache/camel/processor/interceptor/BacklogTracer.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/processor/interceptor/BacklogTracer.java b/camel-core/src/main/java/org/apache/camel/processor/interceptor/BacklogTracer.java
index cd825e5..6dde932 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/interceptor/BacklogTracer.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/interceptor/BacklogTracer.java
@@ -17,10 +17,8 @@
 package org.apache.camel.processor.interceptor;
 
 import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Queue;
-import java.util.Set;
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.atomic.AtomicLong;
 
@@ -32,9 +30,7 @@ import org.apache.camel.api.management.mbean.BacklogTracerEventMessage;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ProcessorDefinitionHelper;
 import org.apache.camel.model.RouteDefinition;
-import org.apache.camel.model.RouteDefinitionHelper;
 import org.apache.camel.spi.InterceptStrategy;
-import org.apache.camel.spi.NodeIdFactory;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.EndpointHelper;
 import org.apache.camel.util.ObjectHelper;
@@ -68,17 +64,11 @@ public class BacklogTracer extends ServiceSupport implements InterceptStrategy {
     private String[] patterns;
     private String traceFilter;
     private Predicate predicate;
-    // remember the processors we are tracing, which we need later
-    private final Set<ProcessorDefinition<?>> processors = new HashSet<ProcessorDefinition<?>>();
 
     public BacklogTracer(CamelContext camelContext) {
         this.camelContext = camelContext;
     }
 
-    public void addDefinition(ProcessorDefinition<?> definition) {
-        processors.add(definition);
-    }
-
     public Queue<DefaultBacklogTracerEventMessage> getQueue() {
         return queue;
     }
@@ -172,10 +162,6 @@ public class BacklogTracer extends ServiceSupport implements InterceptStrategy {
     }
 
     public void setEnabled(boolean enabled) {
-        // okay tracer is enabled then force auto assigning ids
-        if (enabled) {
-            forceAutoAssigningIds();
-        }
         this.enabled = enabled;
     }
 
@@ -322,10 +308,6 @@ public class BacklogTracer extends ServiceSupport implements InterceptStrategy {
         return traceCounter.incrementAndGet();
     }
 
-    void stopProcessor(ProcessorDefinition<?> processorDefinition) {
-        this.processors.remove(processorDefinition);
-    }
-
     @Override
     protected void doStart() throws Exception {
     }
@@ -335,20 +317,4 @@ public class BacklogTracer extends ServiceSupport implements InterceptStrategy {
         queue.clear();
     }
 
-    @Override
-    protected void doShutdown() throws Exception {
-        queue.clear();
-        processors.clear();
-    }
-
-    private void forceAutoAssigningIds() {
-        NodeIdFactory factory = camelContext.getNodeIdFactory();
-        if (factory != null) {
-            for (ProcessorDefinition<?> child : processors) {
-                // ensure also the children get ids assigned
-                RouteDefinitionHelper.forceAssignIds(camelContext, child);
-            }
-        }
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/93101ecb/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java b/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java
index 815b943..f29bb23 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java
@@ -27,7 +27,6 @@ import org.apache.camel.CamelContextAware;
 import org.apache.camel.Channel;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
-import org.apache.camel.Service;
 import org.apache.camel.model.ModelChannel;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ProcessorDefinitionHelper;
@@ -37,7 +36,6 @@ import org.apache.camel.processor.CamelInternalProcessor;
 import org.apache.camel.processor.InterceptorToAsyncProcessorBridge;
 import org.apache.camel.processor.WrapProcessor;
 import org.apache.camel.spi.InterceptStrategy;
-import org.apache.camel.spi.LifecycleStrategy;
 import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.OrderedComparator;
 import org.apache.camel.util.ServiceHelper;
@@ -200,9 +198,9 @@ public class DefaultChannel extends CamelInternalProcessor implements ModelChann
 
         // then wrap the output with the backlog and tracer (backlog first, as we do not want regular tracer to tracer the backlog)
         InterceptStrategy tracer = getOrCreateBacklogTracer();
+        camelContext.addService(tracer);
         if (tracer instanceof BacklogTracer) {
             BacklogTracer backlogTracer = (BacklogTracer) tracer;
-            backlogTracer.addDefinition(targetOutputDef);
 
             RouteDefinition route = ProcessorDefinitionHelper.getRoute(definition);
             boolean first = false;
@@ -214,6 +212,7 @@ public class DefaultChannel extends CamelInternalProcessor implements ModelChann
 
             // add debugger as well so we have both tracing and debugging out of the box
             InterceptStrategy debugger = getOrCreateBacklogDebugger();
+            camelContext.addService(debugger);
             if (debugger instanceof BacklogDebugger) {
                 BacklogDebugger backlogDebugger = (BacklogDebugger) debugger;
                 addAdvice(new BacklogDebuggerAdvice(backlogDebugger, target, targetOutputDef));
@@ -229,6 +228,7 @@ public class DefaultChannel extends CamelInternalProcessor implements ModelChann
         // end users have to explicit enable the tracer to use it, and then its okay if we wrap
         // the processors (but by default tracer is disabled, and therefore we do not wrap processors)
         tracer = getOrCreateTracer();
+        camelContext.addService(tracer);
         if (tracer != null) {
             TraceInterceptor trace = (TraceInterceptor) tracer.wrapProcessorInInterceptors(routeContext.getCamelContext(), targetOutputDef, target, null);
             // trace interceptor need to have a reference to route context so we at runtime can enable/disable tracing on-the-fly
@@ -321,13 +321,6 @@ public class DefaultChannel extends CamelInternalProcessor implements ModelChann
             }
         }
 
-        // which we must manage as well
-        for (LifecycleStrategy strategy : camelContext.getLifecycleStrategies()) {
-            if (tracer instanceof Service) {
-                strategy.onServiceAdd(camelContext, (Service) tracer, null);
-            }
-        }
-
         return tracer;
     }
 
@@ -347,13 +340,6 @@ public class DefaultChannel extends CamelInternalProcessor implements ModelChann
             }
         }
 
-        // which we must manage as well
-        for (LifecycleStrategy strategy : camelContext.getLifecycleStrategies()) {
-            if (tracer instanceof Service) {
-                strategy.onServiceAdd(camelContext, (Service) tracer, null);
-            }
-        }
-
         return tracer;
     }
 
@@ -373,13 +359,6 @@ public class DefaultChannel extends CamelInternalProcessor implements ModelChann
             }
         }
 
-        // which we must manage as well
-        for (LifecycleStrategy strategy : camelContext.getLifecycleStrategies()) {
-            if (debugger instanceof Service) {
-                strategy.onServiceAdd(camelContext, (Service) debugger, null);
-            }
-        }
-
         return debugger;
     }
 


[2/2] git commit: CAMEL-7062: Ensure tracer/debugger lifecycle is stopped when Camel stops. And fixed backloger tracer leak with keep references to processor defs which wasnt needed afterall.

Posted by da...@apache.org.
CAMEL-7062: Ensure tracer/debugger lifecycle is stopped when Camel stops. And fixed backloger tracer leak with keep references to processor defs which wasnt needed afterall.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/4f663169
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/4f663169
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/4f663169

Branch: refs/heads/master
Commit: 4f663169ad7d02af02a6efeb57ce8a1fa8cce1ac
Parents: 2170352
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Dec 12 13:19:21 2013 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Dec 12 14:25:03 2013 +0100

----------------------------------------------------------------------
 .../processor/interceptor/BacklogTracer.java    | 34 --------------------
 .../processor/interceptor/DefaultChannel.java   | 27 ++--------------
 2 files changed, 3 insertions(+), 58 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/4f663169/camel-core/src/main/java/org/apache/camel/processor/interceptor/BacklogTracer.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/processor/interceptor/BacklogTracer.java b/camel-core/src/main/java/org/apache/camel/processor/interceptor/BacklogTracer.java
index cd825e5..6dde932 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/interceptor/BacklogTracer.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/interceptor/BacklogTracer.java
@@ -17,10 +17,8 @@
 package org.apache.camel.processor.interceptor;
 
 import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Queue;
-import java.util.Set;
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.atomic.AtomicLong;
 
@@ -32,9 +30,7 @@ import org.apache.camel.api.management.mbean.BacklogTracerEventMessage;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ProcessorDefinitionHelper;
 import org.apache.camel.model.RouteDefinition;
-import org.apache.camel.model.RouteDefinitionHelper;
 import org.apache.camel.spi.InterceptStrategy;
-import org.apache.camel.spi.NodeIdFactory;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.EndpointHelper;
 import org.apache.camel.util.ObjectHelper;
@@ -68,17 +64,11 @@ public class BacklogTracer extends ServiceSupport implements InterceptStrategy {
     private String[] patterns;
     private String traceFilter;
     private Predicate predicate;
-    // remember the processors we are tracing, which we need later
-    private final Set<ProcessorDefinition<?>> processors = new HashSet<ProcessorDefinition<?>>();
 
     public BacklogTracer(CamelContext camelContext) {
         this.camelContext = camelContext;
     }
 
-    public void addDefinition(ProcessorDefinition<?> definition) {
-        processors.add(definition);
-    }
-
     public Queue<DefaultBacklogTracerEventMessage> getQueue() {
         return queue;
     }
@@ -172,10 +162,6 @@ public class BacklogTracer extends ServiceSupport implements InterceptStrategy {
     }
 
     public void setEnabled(boolean enabled) {
-        // okay tracer is enabled then force auto assigning ids
-        if (enabled) {
-            forceAutoAssigningIds();
-        }
         this.enabled = enabled;
     }
 
@@ -322,10 +308,6 @@ public class BacklogTracer extends ServiceSupport implements InterceptStrategy {
         return traceCounter.incrementAndGet();
     }
 
-    void stopProcessor(ProcessorDefinition<?> processorDefinition) {
-        this.processors.remove(processorDefinition);
-    }
-
     @Override
     protected void doStart() throws Exception {
     }
@@ -335,20 +317,4 @@ public class BacklogTracer extends ServiceSupport implements InterceptStrategy {
         queue.clear();
     }
 
-    @Override
-    protected void doShutdown() throws Exception {
-        queue.clear();
-        processors.clear();
-    }
-
-    private void forceAutoAssigningIds() {
-        NodeIdFactory factory = camelContext.getNodeIdFactory();
-        if (factory != null) {
-            for (ProcessorDefinition<?> child : processors) {
-                // ensure also the children get ids assigned
-                RouteDefinitionHelper.forceAssignIds(camelContext, child);
-            }
-        }
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/4f663169/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java b/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java
index 815b943..f29bb23 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java
@@ -27,7 +27,6 @@ import org.apache.camel.CamelContextAware;
 import org.apache.camel.Channel;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
-import org.apache.camel.Service;
 import org.apache.camel.model.ModelChannel;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ProcessorDefinitionHelper;
@@ -37,7 +36,6 @@ import org.apache.camel.processor.CamelInternalProcessor;
 import org.apache.camel.processor.InterceptorToAsyncProcessorBridge;
 import org.apache.camel.processor.WrapProcessor;
 import org.apache.camel.spi.InterceptStrategy;
-import org.apache.camel.spi.LifecycleStrategy;
 import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.OrderedComparator;
 import org.apache.camel.util.ServiceHelper;
@@ -200,9 +198,9 @@ public class DefaultChannel extends CamelInternalProcessor implements ModelChann
 
         // then wrap the output with the backlog and tracer (backlog first, as we do not want regular tracer to tracer the backlog)
         InterceptStrategy tracer = getOrCreateBacklogTracer();
+        camelContext.addService(tracer);
         if (tracer instanceof BacklogTracer) {
             BacklogTracer backlogTracer = (BacklogTracer) tracer;
-            backlogTracer.addDefinition(targetOutputDef);
 
             RouteDefinition route = ProcessorDefinitionHelper.getRoute(definition);
             boolean first = false;
@@ -214,6 +212,7 @@ public class DefaultChannel extends CamelInternalProcessor implements ModelChann
 
             // add debugger as well so we have both tracing and debugging out of the box
             InterceptStrategy debugger = getOrCreateBacklogDebugger();
+            camelContext.addService(debugger);
             if (debugger instanceof BacklogDebugger) {
                 BacklogDebugger backlogDebugger = (BacklogDebugger) debugger;
                 addAdvice(new BacklogDebuggerAdvice(backlogDebugger, target, targetOutputDef));
@@ -229,6 +228,7 @@ public class DefaultChannel extends CamelInternalProcessor implements ModelChann
         // end users have to explicit enable the tracer to use it, and then its okay if we wrap
         // the processors (but by default tracer is disabled, and therefore we do not wrap processors)
         tracer = getOrCreateTracer();
+        camelContext.addService(tracer);
         if (tracer != null) {
             TraceInterceptor trace = (TraceInterceptor) tracer.wrapProcessorInInterceptors(routeContext.getCamelContext(), targetOutputDef, target, null);
             // trace interceptor need to have a reference to route context so we at runtime can enable/disable tracing on-the-fly
@@ -321,13 +321,6 @@ public class DefaultChannel extends CamelInternalProcessor implements ModelChann
             }
         }
 
-        // which we must manage as well
-        for (LifecycleStrategy strategy : camelContext.getLifecycleStrategies()) {
-            if (tracer instanceof Service) {
-                strategy.onServiceAdd(camelContext, (Service) tracer, null);
-            }
-        }
-
         return tracer;
     }
 
@@ -347,13 +340,6 @@ public class DefaultChannel extends CamelInternalProcessor implements ModelChann
             }
         }
 
-        // which we must manage as well
-        for (LifecycleStrategy strategy : camelContext.getLifecycleStrategies()) {
-            if (tracer instanceof Service) {
-                strategy.onServiceAdd(camelContext, (Service) tracer, null);
-            }
-        }
-
         return tracer;
     }
 
@@ -373,13 +359,6 @@ public class DefaultChannel extends CamelInternalProcessor implements ModelChann
             }
         }
 
-        // which we must manage as well
-        for (LifecycleStrategy strategy : camelContext.getLifecycleStrategies()) {
-            if (debugger instanceof Service) {
-                strategy.onServiceAdd(camelContext, (Service) debugger, null);
-            }
-        }
-
         return debugger;
     }