diff --git a/quartz-core/src/main/java/org/quartz/impl/jdbcjobstore/StdJDBCDelegate.java b/quartz-core/src/main/java/org/quartz/impl/jdbcjobstore/StdJDBCDelegate.java index 6917dcf87..12ff32cf1 100644 --- a/quartz-core/src/main/java/org/quartz/impl/jdbcjobstore/StdJDBCDelegate.java +++ b/quartz-core/src/main/java/org/quartz/impl/jdbcjobstore/StdJDBCDelegate.java @@ -2612,7 +2612,7 @@ public List selectTriggerToAcquire(Connection conn, long noLaterThan ps.setBigDecimal(3, new BigDecimal(String.valueOf(noEarlierThan))); rs = ps.executeQuery(); - while (rs.next() && nextTriggers.size() <= maxCount) { + while (rs.next() && nextTriggers.size() < maxCount) { nextTriggers.add(triggerKey( rs.getString(COL_TRIGGER_NAME), rs.getString(COL_TRIGGER_GROUP))); diff --git a/quartz-core/src/test/java/org/quartz/impl/jdbcjobstore/StdJDBCDelegateTest.java b/quartz-core/src/test/java/org/quartz/impl/jdbcjobstore/StdJDBCDelegateTest.java index c0fae8a6d..017e863cc 100644 --- a/quartz-core/src/test/java/org/quartz/impl/jdbcjobstore/StdJDBCDelegateTest.java +++ b/quartz-core/src/test/java/org/quartz/impl/jdbcjobstore/StdJDBCDelegateTest.java @@ -15,6 +15,7 @@ */ package org.quartz.impl.jdbcjobstore; +import static org.junit.Assert.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock; @@ -27,7 +28,9 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.List; +import org.hamcrest.collection.IsIterableWithSize; import org.quartz.JobPersistenceException; import org.quartz.TriggerKey; import org.quartz.spi.OperableTrigger; @@ -135,6 +138,26 @@ public void testSelectSimpleTriggerWithDeleteBeforeSelectExtendedProps() throws verify(persistenceDelegate).loadExtendedTriggerProperties(any(Connection.class), any(TriggerKey.class)); } + public void testSelectTriggerToAcquireHonorsMaxCount() throws SQLException { + + StdJDBCDelegate jdbcDelegate = new StdJDBCDelegate(); + + Connection conn = mock(Connection.class); + PreparedStatement preparedStatement = mock(PreparedStatement.class); + ResultSet resultSet = mock(ResultSet.class); + + when(conn.prepareStatement(anyString())).thenReturn(preparedStatement); + + when(preparedStatement.executeQuery()).thenReturn(resultSet); + + when(resultSet.next()).thenReturn(true); + when(resultSet.getString(anyString())).thenReturn("test"); + + List triggerKeys = jdbcDelegate.selectTriggerToAcquire(conn, Long.MAX_VALUE, Long.MIN_VALUE, 10); + + assertThat(triggerKeys, IsIterableWithSize.iterableWithSize(10)); + } + static class TestStdJDBCDelegate extends StdJDBCDelegate { private final TriggerPersistenceDelegate testDelegate;