Browse Source

SONAR-7553 DAO of CE_QUEUE count number of rows by status

tags/5.5-RC2
Teryk Bellahsene 8 years ago
parent
commit
b53cc3cb38

+ 4
- 3
sonar-db/src/main/java/org/sonar/db/ce/CeQueueDao.java View File

@@ -21,6 +21,7 @@ package org.sonar.db.ce;

import com.google.common.base.Optional;
import java.util.List;
import javax.annotation.Nullable;
import org.apache.ibatis.session.RowBounds;
import org.sonar.api.utils.System2;
import org.sonar.db.Dao;
@@ -100,11 +101,11 @@ public class CeQueueDao implements Dao {
}

public int countByStatus(DbSession dbSession, CeQueueDto.Status status) {
return mapper(dbSession).countByStatus(status);
return mapper(dbSession).countByStatusAndComponentUuid(status, null);
}

public int countAll(DbSession dbSession) {
return mapper(dbSession).countAll();
public int countByStatusAndComponentUuid(DbSession dbSession, CeQueueDto.Status status, @Nullable String componentUuid) {
return mapper(dbSession).countByStatusAndComponentUuid(status, componentUuid);
}

public Optional<CeQueueDto> peek(DbSession session) {

+ 1
- 3
sonar-db/src/main/java/org/sonar/db/ce/CeQueueMapper.java View File

@@ -40,9 +40,7 @@ public interface CeQueueMapper {
@CheckForNull
CeQueueDto selectByUuid(@Param("uuid") String uuid);

int countByStatus(@Param("status") CeQueueDto.Status status);

int countAll();
int countByStatusAndComponentUuid(@Param("status") CeQueueDto.Status status, @Nullable @Param("componentUuid") String componentUuid);

void insert(CeQueueDto dto);


+ 7
- 2
sonar-db/src/main/resources/org/sonar/db/ce/CeQueueMapper.xml View File

@@ -29,8 +29,13 @@
where cq.uuid=#{uuid}
</select>

<select id="countByStatus" parameterType="org.sonar.db.ce.CeQueueDto$Status" resultType="int">
select count(1) from ce_queue where status=#{status}
<select id="countByStatusAndComponentUuid" parameterType="map" resultType="int">
select count(1)
from ce_queue
where status=#{status}
<if test="componentUuid!=null">
and component_uuid=#{componentUuid}
</if>
</select>

<select id="countAll" resultType="int">

+ 30
- 4
sonar-db/src/test/java/org/sonar/db/ce/CeQueueDaoTest.java View File

@@ -139,7 +139,7 @@ public class CeQueueDaoTest {
system2.setNow(INIT_TIME + 3_000_000);
insert(TASK_UUID_2, COMPONENT_UUID_2, PENDING);

assertThat(underTest.countAll(db.getSession())).isEqualTo(2);
assertThat(db.countRowsOfTable("ce_queue")).isEqualTo(2);
verifyCeQueueStatuses(TASK_UUID_1, PENDING, TASK_UUID_2, PENDING);

// peek first one
@@ -284,6 +284,31 @@ public class CeQueueDaoTest {
assertThat(total).isEqualTo(0);
}

@Test
public void count_by_status_and_component_uuid() {
// task retrieved in the queue
insert(newCeQueueDto(TASK_UUID_1)
.setComponentUuid(COMPONENT_UUID_1)
.setStatus(IN_PROGRESS)
.setTaskType(CeTaskTypes.REPORT)
.setCreatedAt(100_000L));
// on component uuid 2, not returned
insert(newCeQueueDto(TASK_UUID_2)
.setComponentUuid(COMPONENT_UUID_2)
.setStatus(IN_PROGRESS)
.setTaskType(CeTaskTypes.REPORT)
.setCreatedAt(100_000L));
// pending status, not returned
insert(newCeQueueDto(TASK_UUID_3)
.setComponentUuid(COMPONENT_UUID_1)
.setStatus(PENDING)
.setTaskType(CeTaskTypes.REPORT)
.setCreatedAt(100_000L));

assertThat(underTest.countByStatusAndComponentUuid(db.getSession(), IN_PROGRESS, COMPONENT_UUID_1)).isEqualTo(1);
assertThat(underTest.countByStatus(db.getSession(), IN_PROGRESS)).isEqualTo(2);
}

private void insert(CeQueueDto dto) {
underTest.insert(db.getSession(), dto);
db.commit();
@@ -314,12 +339,13 @@ public class CeQueueDaoTest {
});
}

private void verifyCeQueueStatuses(String taskUuid1, CeQueueDto.Status taskStatus1, String taskUuid2, CeQueueDto.Status taskStatus2, String taskUuid3, CeQueueDto.Status taskStatus3) {
verifyCeQueueStatuses(new String[]{taskUuid1, taskUuid2, taskUuid3}, new CeQueueDto.Status[]{taskStatus1, taskStatus2, taskStatus3});
private void verifyCeQueueStatuses(String taskUuid1, CeQueueDto.Status taskStatus1, String taskUuid2, CeQueueDto.Status taskStatus2, String taskUuid3,
CeQueueDto.Status taskStatus3) {
verifyCeQueueStatuses(new String[] {taskUuid1, taskUuid2, taskUuid3}, new CeQueueDto.Status[] {taskStatus1, taskStatus2, taskStatus3});
}

private void verifyCeQueueStatuses(String taskUuid1, CeQueueDto.Status taskStatus1, String taskUuid2, CeQueueDto.Status taskStatus2) {
verifyCeQueueStatuses(new String[]{taskUuid1, taskUuid2}, new CeQueueDto.Status[]{taskStatus1, taskStatus2});
verifyCeQueueStatuses(new String[] {taskUuid1, taskUuid2}, new CeQueueDto.Status[] {taskStatus1, taskStatus2});
}

private void verifyCeQueueStatuses(String[] taskUuids, CeQueueDto.Status[] statuses) {

Loading…
Cancel
Save