From 393fb11209aea9b9180ef04542b45d6dcf3ba69f Mon Sep 17 00:00:00 2001 From: Teryk Bellahsene Date: Tue, 19 Apr 2016 16:27:57 +0200 Subject: [PATCH] SONAR-7187 WS api/ce/activity stop using count(1) on DB table CE_QUEUE --- .../sonar/server/ce/ws/ActivityAction.java | 39 ++++++------------- .../src/test/java/org/sonar/db/DbTester.java | 2 +- 2 files changed, 12 insertions(+), 29 deletions(-) diff --git a/server/sonar-server/src/main/java/org/sonar/server/ce/ws/ActivityAction.java b/server/sonar-server/src/main/java/org/sonar/server/ce/ws/ActivityAction.java index 1c3a6355655..1a15334bd80 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/ce/ws/ActivityAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/ce/ws/ActivityAction.java @@ -61,7 +61,6 @@ import static java.util.Collections.singletonList; import static org.apache.commons.lang.StringUtils.defaultString; import static org.sonar.api.utils.DateUtils.parseDateQuietly; import static org.sonar.api.utils.DateUtils.parseDateTimeQuietly; -import static org.sonar.api.utils.Paging.offset; import static org.sonar.server.ws.WsUtils.checkRequest; import static org.sonar.server.ws.WsUtils.writeProtobuf; import static org.sonarqube.ws.client.ce.CeWsParameters.PARAM_COMPONENT_ID; @@ -73,7 +72,7 @@ import static org.sonarqube.ws.client.ce.CeWsParameters.PARAM_STATUS; import static org.sonarqube.ws.client.ce.CeWsParameters.PARAM_TYPE; public class ActivityAction implements CeWsAction { - private static final int PAGE_INDEX = 1; + private static final int OFFSET = 0; private static final int MAX_PAGE_SIZE = 1000; private final UserSession userSession; @@ -98,7 +97,7 @@ public class ActivityAction implements CeWsAction { .setDescription(format("Search for tasks.
" + "Requires the system administration permission, " + "or project administration permission if %s is set.
" + - "Since 5.5, it's no more posible to specify the page parameter", PARAM_COMPONENT_ID)) + "Since 5.5, it's no more possible to specify the page parameter", PARAM_COMPONENT_ID)) .setResponseExample(getClass().getResource("activity-example.json")) .setHandler(this) .setSince("5.2"); @@ -174,12 +173,12 @@ public class ActivityAction implements CeWsAction { CeTaskQuery query = buildQuery(dbSession, request); checkPermissions(query); - TaskResult queuedTasks = loadQueuedTasks(dbSession, request, query); - TaskResult pastTasks = loadPastTasks(dbSession, request, query, queuedTasks.total); + Iterable queuedTasks = loadQueuedTasks(dbSession, request, query); + Iterable pastTasks = loadPastTasks(dbSession, request, query); return buildResponse( - queuedTasks.tasks, - pastTasks.tasks, + queuedTasks, + pastTasks, request.getPageSize()); } finally { dbClient.closeSession(dbSession); @@ -235,20 +234,14 @@ public class ActivityAction implements CeWsAction { } } - private TaskResult loadQueuedTasks(DbSession dbSession, ActivityWsRequest request, CeTaskQuery query) { - int total = dbClient.ceQueueDao().countByQuery(dbSession, query); + private Iterable loadQueuedTasks(DbSession dbSession, ActivityWsRequest request, CeTaskQuery query) { List dtos = dbClient.ceQueueDao().selectByQueryInDescOrder(dbSession, query, request.getPageSize()); - Iterable tasks = formatter.formatQueue(dbSession, dtos); - return new TaskResult(tasks, total); + return formatter.formatQueue(dbSession, dtos); } - private TaskResult loadPastTasks(DbSession dbSession, ActivityWsRequest request, CeTaskQuery query, int totalQueuedTasks) { - // we have to take into account the total number of queue tasks found - int offset = Math.max(0, offset(PAGE_INDEX, request.getPageSize()) - totalQueuedTasks); - List dtos = dbClient.ceActivityDao().selectByQuery(dbSession, query, offset, request.getPageSize()); - Iterable ceTasks = formatter.formatActivity(dbSession, dtos); - - return new TaskResult(ceTasks, MAX_PAGE_SIZE); + private Iterable loadPastTasks(DbSession dbSession, ActivityWsRequest request, CeTaskQuery query) { + List dtos = dbClient.ceActivityDao().selectByQuery(dbSession, query, OFFSET, request.getPageSize()); + return formatter.formatActivity(dbSession, dtos); } private void checkPermissions(CeTaskQuery query) { @@ -319,14 +312,4 @@ public class ActivityAction implements CeWsAction { return activityWsRequest; } - - private static class TaskResult { - private final Iterable tasks; - private final int total; - - private TaskResult(Iterable tasks, int total) { - this.tasks = tasks; - this.total = total; - } - } } diff --git a/sonar-db/src/test/java/org/sonar/db/DbTester.java b/sonar-db/src/test/java/org/sonar/db/DbTester.java index 64c10150619..d58f519899f 100644 --- a/sonar-db/src/test/java/org/sonar/db/DbTester.java +++ b/sonar-db/src/test/java/org/sonar/db/DbTester.java @@ -155,7 +155,7 @@ public class DbTester extends ExternalResource { /** * Returns the number of rows in the table. Example: - *
int issues = countTable("issues")
+ *
int issues = countRowsOfTable("issues")
*/ public int countRowsOfTable(String tableName) { Preconditions.checkArgument(StringUtils.containsNone(tableName, " "), "Parameter must be the name of a table. Got " + tableName); -- 2.39.5