From d77e76b29896bbd144ff3db89d14ab2ae888f956 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Lesaint?= Date: Thu, 30 Mar 2017 17:13:01 +0200 Subject: [PATCH] SONAR-9041 add CeQueueDao#selectPendingByMinimumExecutionCount --- .../main/java/org/sonar/db/ce/CeQueueDao.java | 4 +++ .../java/org/sonar/db/ce/CeQueueMapper.java | 6 +++- .../org/sonar/db/ce/CeQueueMapper.xml | 10 +++++++ .../java/org/sonar/db/ce/CeQueueDaoTest.java | 29 +++++++++++++++++++ 4 files changed, 48 insertions(+), 1 deletion(-) diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeQueueDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeQueueDao.java index 3c630e3f034..90714f6ebdf 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeQueueDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeQueueDao.java @@ -80,6 +80,10 @@ public class CeQueueDao implements Dao { return Optional.fromNullable(mapper(session).selectByUuid(uuid)); } + public List selectPendingByMinimumExecutionCount(DbSession dbSession, int minExecutionCount) { + return mapper(dbSession).selectPendingByMinimumExecutionCount(minExecutionCount); + } + public CeQueueDto insert(DbSession session, CeQueueDto dto) { if (dto.getCreatedAt() == 0L || dto.getUpdatedAt() == 0L) { long now = system2.now(); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeQueueMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeQueueMapper.java index 1f7161b7fad..2d82fb11ea4 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeQueueMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeQueueMapper.java @@ -41,6 +41,11 @@ public interface CeQueueMapper { @CheckForNull CeQueueDto selectByUuid(@Param("uuid") String uuid); + /** + * Select all pending tasks which execution count is greater than or equal to the specified {@code minExecutionCount}. + */ + List selectPendingByMinimumExecutionCount(@Param("minExecutionCount") int minExecutionCount); + int countByStatusAndComponentUuid(@Param("status") CeQueueDto.Status status, @Nullable @Param("componentUuid") String componentUuid); void insert(CeQueueDto dto); @@ -52,5 +57,4 @@ public interface CeQueueMapper { @Param("old") UpdateIf.OldProperties oldProperties); void deleteByUuid(@Param("uuid") String uuid); - } diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/ce/CeQueueMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/ce/CeQueueMapper.xml index 383fc06394d..df76f8c561e 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/ce/CeQueueMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/ce/CeQueueMapper.xml @@ -175,6 +175,16 @@ id asc + + insert into ce_queue ( diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeQueueDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeQueueDaoTest.java index 925d8c61e3f..1ff894d6d39 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeQueueDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeQueueDaoTest.java @@ -159,6 +159,35 @@ public class CeQueueDaoTest { assertThat(underTest.selectAllInAscOrder(db.getSession())).extracting("uuid").containsOnly(TASK_UUID_1, TASK_UUID_2, TASK_UUID_3); } + @Test + public void selectPendingByMinimumExecutionCount_returns_pending_tasks_with_executionCount_greater_or_equal_to_argument() { + insert("p1", CeQueueDto.Status.PENDING, 0); + insert("p2", CeQueueDto.Status.PENDING, 1); + insert("p3", CeQueueDto.Status.PENDING, 2); + insert("i1", CeQueueDto.Status.IN_PROGRESS, 0); + insert("i2", CeQueueDto.Status.IN_PROGRESS, 1); + insert("i3", CeQueueDto.Status.IN_PROGRESS, 2); + + assertThat(underTest.selectPendingByMinimumExecutionCount(db.getSession(), 0)) + .extracting(CeQueueDto::getUuid) + .containsOnly("p1", "p2", "p3"); + assertThat(underTest.selectPendingByMinimumExecutionCount(db.getSession(), 1)) + .extracting(CeQueueDto::getUuid) + .containsOnly("p2", "p3"); + assertThat(underTest.selectPendingByMinimumExecutionCount(db.getSession(), 2)) + .extracting(CeQueueDto::getUuid) + .containsOnly("p3"); + assertThat(underTest.selectPendingByMinimumExecutionCount(db.getSession(), 3)) + .isEmpty(); + assertThat(underTest.selectPendingByMinimumExecutionCount(db.getSession(), 3 + Math.abs(new Random().nextInt(20)))) + .isEmpty(); + } + + @Test + public void selectPendingByMinimumExecutionCount_does_not_return_non_pending_tasks() { + + } + @Test public void test_delete() { insert(TASK_UUID_1, COMPONENT_UUID_1, PENDING); -- 2.39.5