From a2e88e9141e5f9d5bda8b62414b816685e767227 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Fri, 15 Apr 2016 17:17:01 +0200 Subject: SONAR-7187 Remove paging from api/ce/activity In order to have no more full scan on the ce_activity table, we had to remove paging as it was executing a select count(* from ce_activity) --- .../main/java/org/sonar/db/ce/CeActivityDao.java | 7 ---- .../src/main/java/org/sonar/db/ce/CeQueueDao.java | 5 ++- .../resources/org/sonar/db/ce/CeActivityMapper.xml | 5 --- .../java/org/sonar/db/ce/CeActivityDaoTest.java | 42 ---------------------- .../test/java/org/sonar/db/ce/CeQueueDaoTest.java | 9 +++-- 5 files changed, 6 insertions(+), 62 deletions(-) (limited to 'sonar-db') diff --git a/sonar-db/src/main/java/org/sonar/db/ce/CeActivityDao.java b/sonar-db/src/main/java/org/sonar/db/ce/CeActivityDao.java index e32a1be1535..1055de867d5 100644 --- a/sonar-db/src/main/java/org/sonar/db/ce/CeActivityDao.java +++ b/sonar-db/src/main/java/org/sonar/db/ce/CeActivityDao.java @@ -72,13 +72,6 @@ public class CeActivityDao implements Dao { return mapper(dbSession).selectByQuery(query, offset, pageSize); } - public int countByQuery(DbSession dbSession, CeTaskQuery query) { - if (query.isShortCircuitedByComponentUuids()) { - return 0; - } - return mapper(dbSession).countByQuery(query); - } - private static CeActivityMapper mapper(DbSession dbSession) { return dbSession.getMapper(CeActivityMapper.class); } diff --git a/sonar-db/src/main/java/org/sonar/db/ce/CeQueueDao.java b/sonar-db/src/main/java/org/sonar/db/ce/CeQueueDao.java index 9670c8c8068..779f7372bbf 100644 --- a/sonar-db/src/main/java/org/sonar/db/ce/CeQueueDao.java +++ b/sonar-db/src/main/java/org/sonar/db/ce/CeQueueDao.java @@ -22,7 +22,6 @@ package org.sonar.db.ce; import com.google.common.base.Optional; import java.util.List; import org.apache.ibatis.session.RowBounds; -import org.sonar.api.utils.Paging; import org.sonar.api.utils.System2; import org.sonar.db.Dao; import org.sonar.db.DbSession; @@ -48,14 +47,14 @@ public class CeQueueDao implements Dao { return mapper(session).selectAllInAscOrder(); } - public List selectByQueryInDescOrder(DbSession dbSession, CeTaskQuery query, Paging paging) { + public List selectByQueryInDescOrder(DbSession dbSession, CeTaskQuery query, int pageSize) { if (query.isShortCircuitedByComponentUuids() || query.isOnlyCurrents() || query.getMaxExecutedAt() != null) { return emptyList(); } - return mapper(dbSession).selectByQueryInDescOrder(query, new RowBounds(paging.offset(), paging.pageSize())); + return mapper(dbSession).selectByQueryInDescOrder(query, new RowBounds(0, pageSize)); } public int countByQuery(DbSession dbSession, CeTaskQuery query) { diff --git a/sonar-db/src/main/resources/org/sonar/db/ce/CeActivityMapper.xml b/sonar-db/src/main/resources/org/sonar/db/ce/CeActivityMapper.xml index 08247b4faa1..765c5f28a6b 100644 --- a/sonar-db/src/main/resources/org/sonar/db/ce/CeActivityMapper.xml +++ b/sonar-db/src/main/resources/org/sonar/db/ce/CeActivityMapper.xml @@ -74,11 +74,6 @@ WHERE rn BETWEEN (#{offset} * #{pageSize} + 1) AND ((#{offset} + 1) * #{pageSize}) - - from ce_activity ca diff --git a/sonar-db/src/test/java/org/sonar/db/ce/CeActivityDaoTest.java b/sonar-db/src/test/java/org/sonar/db/ce/CeActivityDaoTest.java index bb92b76097b..14f3a2e4c71 100644 --- a/sonar-db/src/test/java/org/sonar/db/ce/CeActivityDaoTest.java +++ b/sonar-db/src/test/java/org/sonar/db/ce/CeActivityDaoTest.java @@ -140,36 +140,6 @@ public class CeActivityDaoTest { assertThat(selectPageOfUuids(10, 2)).isEmpty(); } - @Test - public void test_countByQuery() { - insert("TASK_1", REPORT, "PROJECT_1", CeActivityDto.Status.SUCCESS); - insert("TASK_2", REPORT, "PROJECT_1", CeActivityDto.Status.FAILED); - insert("TASK_3", REPORT, "PROJECT_2", CeActivityDto.Status.SUCCESS); - insert("TASK_4", "views", null, CeActivityDto.Status.SUCCESS); - - // no filters - CeTaskQuery query = new CeTaskQuery(); - assertThat(underTest.countByQuery(db.getSession(), query)).isEqualTo(4); - - // select by component uuid - query = new CeTaskQuery().setComponentUuid("PROJECT_1"); - assertThat(underTest.countByQuery(db.getSession(), query)).isEqualTo(2); - - // select by status - query = new CeTaskQuery().setStatuses(singletonList(CeActivityDto.Status.SUCCESS.name())); - assertThat(underTest.countByQuery(db.getSession(), query)).isEqualTo(3); - - // select by type - query = new CeTaskQuery().setType(REPORT); - assertThat(underTest.countByQuery(db.getSession(), query)).isEqualTo(3); - query = new CeTaskQuery().setType("views"); - assertThat(underTest.countByQuery(db.getSession(), query)).isEqualTo(1); - - // select by multiple conditions - query = new CeTaskQuery().setType(REPORT).setOnlyCurrents(true).setComponentUuid("PROJECT_1"); - assertThat(underTest.countByQuery(db.getSession(), query)).isEqualTo(1); - } - @Test public void selectByQuery_no_results_if_shortcircuited_by_component_uuids() { insert("TASK_1", REPORT, "PROJECT_1", CeActivityDto.Status.SUCCESS); @@ -179,15 +149,6 @@ public class CeActivityDaoTest { assertThat(underTest.selectByQuery(db.getSession(), query, 0, 0)).isEmpty(); } - @Test - public void countByQuery_no_results_if_shortcircuited_by_component_uuids() { - insert("TASK_1", REPORT, "PROJECT_1", CeActivityDto.Status.SUCCESS); - - CeTaskQuery query = new CeTaskQuery(); - query.setComponentUuids(Collections.emptyList()); - assertThat(underTest.countByQuery(db.getSession(), query)).isEqualTo(0); - } - @Test public void select_and_count_by_date() { insertWithDates("UUID1", 1_450_000_000_000L, 1_470_000_000_000L); @@ -196,19 +157,16 @@ public class CeActivityDaoTest { // search by min submitted date CeTaskQuery query = new CeTaskQuery().setMinSubmittedAt(1_455_000_000_000L); assertThat(underTest.selectByQuery(db.getSession(), query, 0, 5)).extracting("uuid").containsOnly("UUID2"); - assertThat(underTest.countByQuery(db.getSession(), query)).isEqualTo(1); // search by max executed date query = new CeTaskQuery().setMaxExecutedAt(1_475_000_000_000L); assertThat(underTest.selectByQuery(db.getSession(), query, 0, 5)).extracting("uuid").containsOnly("UUID1"); - assertThat(underTest.countByQuery(db.getSession(), query)).isEqualTo(1); // search by both dates query = new CeTaskQuery() .setMinSubmittedAt(1_400_000_000_000L) .setMaxExecutedAt(1_475_000_000_000L); assertThat(underTest.selectByQuery(db.getSession(), query, 0, 5)).extracting("uuid").containsOnly("UUID1"); - assertThat(underTest.countByQuery(db.getSession(), query)).isEqualTo(1); } diff --git a/sonar-db/src/test/java/org/sonar/db/ce/CeQueueDaoTest.java b/sonar-db/src/test/java/org/sonar/db/ce/CeQueueDaoTest.java index 479bd23bf76..70fc652ad83 100644 --- a/sonar-db/src/test/java/org/sonar/db/ce/CeQueueDaoTest.java +++ b/sonar-db/src/test/java/org/sonar/db/ce/CeQueueDaoTest.java @@ -29,7 +29,6 @@ import java.util.Map; import javax.annotation.Nullable; import org.junit.Rule; import org.junit.Test; -import org.sonar.api.utils.Paging; import org.sonar.api.utils.internal.TestSystem2; import org.sonar.db.DbTester; @@ -227,7 +226,7 @@ public class CeQueueDaoTest { .setType(CeTaskTypes.REPORT) .setMinSubmittedAt(100_000L); - List result = underTest.selectByQueryInDescOrder(db.getSession(), query, Paging.forPageIndex(1).withPageSize(1_000).andTotal(1_000)); + List result = underTest.selectByQueryInDescOrder(db.getSession(), query, 1_000); int total = underTest.countByQuery(db.getSession(), query); assertThat(result).extracting("uuid").containsExactly("TASK_5", TASK_UUID_2); @@ -244,7 +243,7 @@ public class CeQueueDaoTest { CeTaskQuery query = new CeTaskQuery().setOnlyCurrents(true); - List result = underTest.selectByQueryInDescOrder(db.getSession(), query, Paging.forPageIndex(1).withPageSize(1_000).andTotal(1_000)); + List result = underTest.selectByQueryInDescOrder(db.getSession(), query, 1_000); int total = underTest.countByQuery(db.getSession(), query); assertThat(result).isEmpty(); @@ -261,7 +260,7 @@ public class CeQueueDaoTest { CeTaskQuery query = new CeTaskQuery().setMaxExecutedAt(1_000_000_000_000L); - List result = underTest.selectByQueryInDescOrder(db.getSession(), query, Paging.forPageIndex(1).withPageSize(1_000).andTotal(1_000)); + List result = underTest.selectByQueryInDescOrder(db.getSession(), query, 1_000); int total = underTest.countByQuery(db.getSession(), query); assertThat(result).isEmpty(); @@ -278,7 +277,7 @@ public class CeQueueDaoTest { CeTaskQuery query = new CeTaskQuery().setComponentUuids(Collections.emptyList()); - List result = underTest.selectByQueryInDescOrder(db.getSession(), query, Paging.forPageIndex(1).withPageSize(1_000).andTotal(1_000)); + List result = underTest.selectByQueryInDescOrder(db.getSession(), query, 1_000); int total = underTest.countByQuery(db.getSession(), query); assertThat(result).isEmpty(); -- cgit v1.2.3