diff options
author | Sébastien Lesaint <sebastien.lesaint@sonarsource.com> | 2017-03-30 18:50:44 +0200 |
---|---|---|
committer | Eric Hartmann <hartmann.eric@gmail.Com> | 2017-04-27 09:23:18 +0200 |
commit | e5be2615ac8fa5baf68589eb9224bb3d16d882f2 (patch) | |
tree | 5a070a70d028e3d7ed6f2859bd97078d4e2531fe | |
parent | dd09efbab2e48ee1b11a98d868493d4c5457ca69 (diff) | |
download | sonarqube-e5be2615ac8fa5baf68589eb9224bb3d16d882f2.tar.gz sonarqube-e5be2615ac8fa5baf68589eb9224bb3d16d882f2.zip |
SONAR-9057 make CeQueueCleaner startable and run as startup task
8 files changed, 53 insertions, 45 deletions
diff --git a/server/sonar-ce/src/main/java/org/sonar/ce/CeQueueModule.java b/server/sonar-ce/src/main/java/org/sonar/ce/CeQueueModule.java index db65f99042a..a11e826cd12 100644 --- a/server/sonar-ce/src/main/java/org/sonar/ce/CeQueueModule.java +++ b/server/sonar-ce/src/main/java/org/sonar/ce/CeQueueModule.java @@ -22,7 +22,6 @@ package org.sonar.ce; import org.sonar.core.platform.Module; import org.sonar.server.computation.monitoring.CEQueueStatusImpl; import org.sonar.server.computation.monitoring.CeTasksMBeanImpl; -import org.sonar.server.computation.queue.CeQueueCleaner; import org.sonar.server.computation.queue.CeQueueInitializer; import org.sonar.server.computation.queue.InternalCeQueueImpl; @@ -36,9 +35,6 @@ public class CeQueueModule extends Module { // queue monitoring CEQueueStatusImpl.class, CeTasksMBeanImpl.class, - - // queue cleaning - CeQueueCleaner.class, // init queue state and queue processing CeQueueInitializer.class); diff --git a/server/sonar-ce/src/main/java/org/sonar/ce/container/ComputeEngineContainerImpl.java b/server/sonar-ce/src/main/java/org/sonar/ce/container/ComputeEngineContainerImpl.java index 90fe0838bb2..ed306dd165a 100644 --- a/server/sonar-ce/src/main/java/org/sonar/ce/container/ComputeEngineContainerImpl.java +++ b/server/sonar-ce/src/main/java/org/sonar/ce/container/ComputeEngineContainerImpl.java @@ -68,6 +68,7 @@ import org.sonar.process.logging.LogbackHelper; import org.sonar.server.component.ComponentCleanerService; import org.sonar.server.component.ComponentFinder; import org.sonar.server.component.index.ComponentIndexer; +import org.sonar.server.computation.queue.CeQueueCleaner; import org.sonar.server.computation.queue.PurgeCeActivities; import org.sonar.server.computation.task.projectanalysis.ProjectAnalysisTaskModule; import org.sonar.server.computation.taskprocessor.CeTaskProcessorModule; @@ -400,6 +401,7 @@ public class ComputeEngineContainerImpl implements ComputeEngineContainer { LogServerId.class, ServerLifecycleNotifier.class, PurgeCeActivities.class, + CeQueueCleaner.class }; } diff --git a/server/sonar-ce/src/main/java/org/sonar/ce/queue/package-info.java b/server/sonar-ce/src/main/java/org/sonar/ce/queue/package-info.java new file mode 100644 index 00000000000..93eae709d90 --- /dev/null +++ b/server/sonar-ce/src/main/java/org/sonar/ce/queue/package-info.java @@ -0,0 +1,23 @@ +/* + * SonarQube + * Copyright (C) 2009-2017 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +@ParametersAreNonnullByDefault +package org.sonar.ce.queue; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java b/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java index edf0062e394..33fd4cdbdb0 100644 --- a/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java +++ b/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java @@ -90,7 +90,7 @@ public class ComputeEngineContainerImplTest { CONTAINER_ITSELF + 74 // level 4 + 4 // content of CeConfigurationModule - + 5 // content of CeQueueModule + + 4 // content of CeQueueModule + 3 // content of CeHttpModule + 3 // content of CeTaskCommonsModule + 4 // content of ProjectAnalysisTaskModule diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/queue/CeQueueCleaner.java b/server/sonar-server/src/main/java/org/sonar/server/computation/queue/CeQueueCleaner.java index df886517af7..003b66360ea 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/queue/CeQueueCleaner.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/queue/CeQueueCleaner.java @@ -20,6 +20,7 @@ package org.sonar.server.computation.queue; import java.util.List; +import org.picocontainer.Startable; import org.sonar.api.ce.ComputeEngineSide; import org.sonar.api.platform.ServerUpgradeStatus; import org.sonar.api.utils.log.Logger; @@ -32,7 +33,7 @@ import org.sonar.db.DbSession; * CE workers must not be started before execution of this class. */ @ComputeEngineSide -public class CeQueueCleaner { +public class CeQueueCleaner implements Startable { private static final Logger LOGGER = Loggers.get(CeQueueCleaner.class); @@ -46,11 +47,14 @@ public class CeQueueCleaner { this.queue = queue; } - public void clean(DbSession dbSession) { + @Override + public void start() { if (serverUpgradeStatus.isUpgraded()) { cleanOnUpgrade(); } else { - verifyConsistency(dbSession); + try (DbSession dbSession = dbClient.openSession(false)) { + verifyConsistency(dbSession); + } } } @@ -73,4 +77,9 @@ public class CeQueueCleaner { dbClient.ceTaskInputDao().deleteByUuids(dbSession, uuids); dbSession.commit(); } + + @Override + public void stop() { + // nothing to do + } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/queue/CeQueueInitializer.java b/server/sonar-server/src/main/java/org/sonar/server/computation/queue/CeQueueInitializer.java index 93a260ced5a..94ea0858d0a 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/queue/CeQueueInitializer.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/queue/CeQueueInitializer.java @@ -22,8 +22,6 @@ package org.sonar.server.computation.queue; import org.sonar.api.ce.ComputeEngineSide; import org.sonar.api.platform.Server; import org.sonar.api.platform.ServerStartHandler; -import org.sonar.db.DbClient; -import org.sonar.db.DbSession; import org.sonar.server.computation.taskprocessor.CeProcessingScheduler; /** @@ -34,14 +32,10 @@ import org.sonar.server.computation.taskprocessor.CeProcessingScheduler; @ComputeEngineSide public class CeQueueInitializer implements ServerStartHandler { - private final DbClient dbClient; - private final CeQueueCleaner cleaner; private final CeProcessingScheduler scheduler; private boolean done = false; - public CeQueueInitializer(DbClient dbClient, CeQueueCleaner cleaner, CeProcessingScheduler scheduler) { - this.dbClient = dbClient; - this.cleaner = cleaner; + public CeQueueInitializer(CeProcessingScheduler scheduler) { this.scheduler = scheduler; } @@ -54,9 +48,6 @@ public class CeQueueInitializer implements ServerStartHandler { } private void initCe() { - try (DbSession dbSession = dbClient.openSession(false)) { - cleaner.clean(dbSession); - scheduler.startScheduling(); - } + scheduler.startScheduling(); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/queue/CeQueueCleanerTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/queue/CeQueueCleanerTest.java index 861ede73ba7..8528ee329df 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/queue/CeQueueCleanerTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/queue/CeQueueCleanerTest.java @@ -46,34 +46,34 @@ public class CeQueueCleanerTest { private CeQueueCleaner underTest = new CeQueueCleaner(dbTester.getDbClient(), serverUpgradeStatus, queue); @Test - public void reset_in_progress_tasks_to_pending() throws IOException { + public void start_resets_in_progress_tasks_to_pending() throws IOException { insertInQueue("TASK_1", CeQueueDto.Status.PENDING); insertInQueue("TASK_2", CeQueueDto.Status.IN_PROGRESS); - underTest.clean(dbTester.getSession()); + underTest.start(); assertThat(dbTester.getDbClient().ceQueueDao().countByStatus(dbTester.getSession(), CeQueueDto.Status.PENDING)).isEqualTo(2); assertThat(dbTester.getDbClient().ceQueueDao().countByStatus(dbTester.getSession(), CeQueueDto.Status.IN_PROGRESS)).isEqualTo(0); } @Test - public void clear_queue_if_version_upgrade() { + public void start_clears_queue_if_version_upgrade() { when(serverUpgradeStatus.isUpgraded()).thenReturn(true); - underTest.clean(dbTester.getSession()); + underTest.start(); verify(queue).clear(); } @Test - public void delete_orphan_report_files() throws Exception { + public void start_deletes_orphan_report_files() throws Exception { // analysis reports are persisted but the associated // task is not in the queue insertInQueue("TASK_1", CeQueueDto.Status.PENDING); insertTaskData("TASK_1"); insertTaskData("TASK_2"); - underTest.clean(dbTester.getSession()); + underTest.start(); CeTaskInputDao dataDao = dbTester.getDbClient().ceTaskInputDao(); Optional<CeTaskInputDao.DataStream> task1Data = dataDao.selectData(dbTester.getSession(), "TASK_1"); diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/queue/CeQueueInitializerTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/queue/CeQueueInitializerTest.java index cd62b82b2e1..b458508a31e 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/queue/CeQueueInitializerTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/queue/CeQueueInitializerTest.java @@ -20,39 +20,26 @@ package org.sonar.server.computation.queue; import java.io.IOException; -import org.junit.Rule; import org.junit.Test; -import org.mockito.InOrder; -import org.mockito.Mockito; import org.sonar.api.platform.Server; -import org.sonar.api.utils.System2; -import org.sonar.db.DbSession; -import org.sonar.db.DbTester; import org.sonar.server.computation.taskprocessor.CeProcessingScheduler; -import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; public class CeQueueInitializerTest { - @Rule - public DbTester dbTester = DbTester.create(System2.INSTANCE); - - Server server = mock(Server.class); - CeQueueCleaner cleaner = mock(CeQueueCleaner.class); - CeProcessingScheduler scheduler = mock(CeProcessingScheduler.class); - CeQueueInitializer underTest = new CeQueueInitializer(dbTester.getDbClient(), cleaner, scheduler); + private Server server = mock(Server.class); + private CeProcessingScheduler scheduler = mock(CeProcessingScheduler.class); + private CeQueueInitializer underTest = new CeQueueInitializer(scheduler); @Test public void clean_queue_then_start_scheduler_of_workers() throws IOException { - InOrder inOrder = Mockito.inOrder(cleaner, scheduler); - underTest.onServerStart(server); - inOrder.verify(cleaner).clean(any(DbSession.class)); - inOrder.verify(scheduler).startScheduling(); + verify(scheduler).startScheduling(); } @Test @@ -60,11 +47,11 @@ public class CeQueueInitializerTest { underTest.onServerStart(server); - reset(cleaner, scheduler); + reset(scheduler); underTest.onServerStart(server); - verifyZeroInteractions(cleaner, scheduler); + verifyZeroInteractions(scheduler); } } |