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 /server/sonar-server | |
parent | dd09efbab2e48ee1b11a98d868493d4c5457ca69 (diff) | |
download | sonarqube-e5be2615ac8fa5baf68589eb9224bb3d16d882f2.tar.gz sonarqube-e5be2615ac8fa5baf68589eb9224bb3d16d882f2.zip |
SONAR-9057 make CeQueueCleaner startable and run as startup task
Diffstat (limited to 'server/sonar-server')
4 files changed, 27 insertions, 40 deletions
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); } } |