Author: davsclaus Date: Sun Apr 22 08:45:15 2012 New Revision: 1328818 URL: http://svn.apache.org/viewvc?rev=1328818&view=rev Log: CAMEL-5184: Added pollTimeout to seda endpoint. Lowered timeout during unit testing camel-core, to cut down about 100 secs.
Modified: camel/branches/camel-2.9.x/ (props changed) camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/component/seda/SedaConsumer.java camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/ContextTestSupport.java Propchange: camel/branches/camel-2.9.x/ ------------------------------------------------------------------------------ Merged /camel/trunk:r1327435 Propchange: camel/branches/camel-2.9.x/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/component/seda/SedaConsumer.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/component/seda/SedaConsumer.java?rev=1328818&r1=1328817&r2=1328818&view=diff ============================================================================== --- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/component/seda/SedaConsumer.java (original) +++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/component/seda/SedaConsumer.java Sun Apr 22 08:45:15 2012 @@ -60,10 +60,12 @@ public class SedaConsumer extends Servic private AsyncProcessor processor; private ExecutorService executor; private ExceptionHandler exceptionHandler; + private final int pollTimeout; public SedaConsumer(SedaEndpoint endpoint, Processor processor) { this.endpoint = endpoint; this.processor = AsyncProcessorConverterHelper.convert(processor); + this.pollTimeout = endpoint.getPollTimeout(); } @Override @@ -143,7 +145,8 @@ public class SedaConsumer extends Servic if (getEndpoint().getCamelContext().getStatus().isStarting()) { LOG.trace("CamelContext is starting so skip polling"); try { - Thread.sleep(1000); + // sleep at most 1 sec + Thread.sleep(Math.min(pollTimeout, 1000)); } catch (InterruptedException e) { LOG.debug("Sleep interrupted, are we stopping? {}", isStopping() || isStopped()); } @@ -154,7 +157,8 @@ public class SedaConsumer extends Servic if (isSuspending() || isSuspended()) { LOG.trace("Consumer is suspended so skip polling"); try { - Thread.sleep(1000); + // sleep at most 1 sec + Thread.sleep(Math.min(pollTimeout, 1000)); } catch (InterruptedException e) { LOG.debug("Sleep interrupted, are we stopping? {}", isStopping() || isStopped()); } @@ -163,7 +167,8 @@ public class SedaConsumer extends Servic Exchange exchange = null; try { - exchange = queue.poll(1000, TimeUnit.MILLISECONDS); + // use the end user configured poll timeout + exchange = queue.poll(pollTimeout, TimeUnit.MILLISECONDS); if (exchange != null) { try { // send a new copied exchange with new camel context @@ -309,7 +314,7 @@ public class SedaConsumer extends Servic // submit needed number of tasks int tasks = poolSize - taskCount.get(); - LOG.debug("Creating {} consumer tasks", tasks); + LOG.debug("Creating {} consumer tasks with poll timeout {} ms.", tasks, pollTimeout); for (int i = 0; i < tasks; i++) { executor.execute(this); } Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java?rev=1328818&r1=1328817&r2=1328818&view=diff ============================================================================== --- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java (original) +++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java Sun Apr 22 08:45:15 2012 @@ -62,6 +62,7 @@ public class SedaEndpoint extends Defaul private volatile MulticastProcessor consumerMulticastProcessor; private volatile boolean multicastStarted; private boolean blockWhenFull; + private int pollTimeout = 1000; public SedaEndpoint() { } @@ -203,6 +204,15 @@ public class SedaEndpoint extends Defaul this.multipleConsumers = multipleConsumers; } + @ManagedAttribute + public int getPollTimeout() { + return pollTimeout; + } + + public void setPollTimeout(int pollTimeout) { + this.pollTimeout = pollTimeout; + } + public boolean isSingleton() { return true; } @@ -332,6 +342,16 @@ public class SedaEndpoint extends Defaul } @Override + protected void doStart() throws Exception { + super.doStart(); + + // special for unit testing where we can set a system property to make seda poll faster + // and therefore also react faster upon shutdown, which makes overall testing faster of the Camel project + String override = System.getProperty("CamelSedaPollTimeout", "" + getPollTimeout()); + setPollTimeout(Integer.valueOf(override)); + } + + @Override protected void doShutdown() throws Exception { // notify component we are shutting down this endpoint if (getComponent() != null) { Modified: camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/ContextTestSupport.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/ContextTestSupport.java?rev=1328818&r1=1328817&r2=1328818&view=diff ============================================================================== --- camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/ContextTestSupport.java (original) +++ camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/ContextTestSupport.java Sun Apr 22 08:45:15 2012 @@ -81,6 +81,9 @@ public abstract class ContextTestSupport @Override protected void setUp() throws Exception { + // make SEDA testing faster + System.setProperty("CamelSedaPollTimeout", "10"); + if (!useJmx()) { disableJMX(); } else { @@ -129,6 +132,7 @@ public abstract class ContextTestSupport } stopCamelContext(); System.clearProperty(JmxSystemPropertyKeys.DISABLED); + System.clearProperty("CamelSedaPollTimeout"); } /**