From 4782feb6a1f4a6a399ceacb315b1fc96d7ee904b Mon Sep 17 00:00:00 2001 From: Timothy Bish Date: Thu, 4 Feb 2016 17:16:33 -0500 Subject: [PATCH] https://issues.apache.org/jira/browse/AMQ-6159 Ensure proper repeat counts are scheduled. (cherry picked from commit 386210fafe331630aded29f2af64b1ccdf161bf3) --- .../broker/scheduler/memory/InMemoryJobScheduler.java | 5 +++-- .../activemq/broker/scheduler/JmsSchedulerTest.java | 10 ++++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/activemq-broker/src/main/java/org/apache/activemq/broker/scheduler/memory/InMemoryJobScheduler.java b/activemq-broker/src/main/java/org/apache/activemq/broker/scheduler/memory/InMemoryJobScheduler.java index 41be322f03..bd2aaf55ca 100644 --- a/activemq-broker/src/main/java/org/apache/activemq/broker/scheduler/memory/InMemoryJobScheduler.java +++ b/activemq-broker/src/main/java/org/apache/activemq/broker/scheduler/memory/InMemoryJobScheduler.java @@ -273,7 +273,9 @@ public class InMemoryJobScheduler implements JobScheduler { private void doReschedule(InMemoryJob job, long nextExecutionTime) { job.setNextTime(nextExecutionTime); job.incrementExecutionCount(); - job.decrementRepeatCount(); + if (!job.isCron()) { + job.decrementRepeatCount(); + } LOG.trace("JobScheduler rescheduling job[{}] to fire at: {}", job.getJobId(), JobSupport.getDateTime(nextExecutionTime)); @@ -291,7 +293,6 @@ public class InMemoryJobScheduler implements JobScheduler { } finally { lock.writeLock().unlock(); } - } private void doRemoveJob(String jobId) throws IOException { diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/broker/scheduler/JmsSchedulerTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/broker/scheduler/JmsSchedulerTest.java index 0ce584d1e5..d0c1ccc430 100644 --- a/activemq-unit-tests/src/test/java/org/apache/activemq/broker/scheduler/JmsSchedulerTest.java +++ b/activemq-unit-tests/src/test/java/org/apache/activemq/broker/scheduler/JmsSchedulerTest.java @@ -38,9 +38,13 @@ import org.apache.activemq.ScheduledMessage; import org.apache.activemq.util.ProducerThread; import org.apache.activemq.util.Wait; import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class JmsSchedulerTest extends JobSchedulerTestSupport { + private static final Logger LOG = LoggerFactory.getLogger(JmsSchedulerTest.class); + @Test public void testCron() throws Exception { final int COUNT = 10; @@ -55,8 +59,9 @@ public class JmsSchedulerTest extends JobSchedulerTestSupport { consumer.setMessageListener(new MessageListener() { @Override public void onMessage(Message message) { - latch.countDown(); count.incrementAndGet(); + latch.countDown(); + LOG.info("Received scheduled message, waiting for {} more", latch.getCount()); } }); @@ -167,8 +172,9 @@ public class JmsSchedulerTest extends JobSchedulerTestSupport { consumer.setMessageListener(new MessageListener() { @Override public void onMessage(Message message) { - latch.countDown(); count.incrementAndGet(); + latch.countDown(); + LOG.info("Received scheduled message, waiting for {} more", latch.getCount()); } });