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



import com.google.common.base.Optional; import com.google.common.base.Optional;
import java.util.List; import java.util.List;
import javax.annotation.Nullable;
import org.apache.ibatis.session.RowBounds; import org.apache.ibatis.session.RowBounds;
import org.sonar.api.utils.System2; import org.sonar.api.utils.System2;
import org.sonar.db.Dao; import org.sonar.db.Dao;
} }


public int countByStatus(DbSession dbSession, CeQueueDto.Status status) { 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) { public Optional<CeQueueDto> peek(DbSession session) {

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

@CheckForNull @CheckForNull
CeQueueDto selectByUuid(@Param("uuid") String uuid); 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); void insert(CeQueueDto dto);



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

where cq.uuid=#{uuid} where cq.uuid=#{uuid}
</select> </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>


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

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

system2.setNow(INIT_TIME + 3_000_000); system2.setNow(INIT_TIME + 3_000_000);
insert(TASK_UUID_2, COMPONENT_UUID_2, PENDING); 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); verifyCeQueueStatuses(TASK_UUID_1, PENDING, TASK_UUID_2, PENDING);


// peek first one // peek first one
assertThat(total).isEqualTo(0); 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) { private void insert(CeQueueDto dto) {
underTest.insert(db.getSession(), dto); underTest.insert(db.getSession(), dto);
db.commit(); db.commit();
}); });
} }


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) { 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) { private void verifyCeQueueStatuses(String[] taskUuids, CeQueueDto.Status[] statuses) {

Loading…
Cancel
Save