diff options
author | Sébastien Lesaint <sebastien.lesaint@sonarsource.com> | 2016-08-25 15:45:56 +0200 |
---|---|---|
committer | Sébastien Lesaint <sebastien.lesaint@sonarsource.com> | 2016-08-29 09:48:29 +0200 |
commit | 3b5998a64f0c3eb8e42e48067b97c885739e874a (patch) | |
tree | ce6a1a6f3e5e0e6985679c124178f91d4f258ea5 /server | |
parent | 57207a315109aa1bb3150f87453f2c8a4db3f1e3 (diff) | |
download | sonarqube-3b5998a64f0c3eb8e42e48067b97c885739e874a.tar.gz sonarqube-3b5998a64f0c3eb8e42e48067b97c885739e874a.zip |
SONAR-7911 restore purge of CE_ACTIVITIES + purge CE_SCANNER_CONTEXT
Diffstat (limited to 'server')
3 files changed, 134 insertions, 0 deletions
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 7d6524dcf48..73e12ff3671 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 @@ -73,6 +73,7 @@ import org.sonar.server.activity.index.ActivityIndexer; import org.sonar.server.component.ComponentCleanerService; import org.sonar.server.component.ComponentFinder; import org.sonar.server.component.ComponentService; +import org.sonar.server.computation.queue.PurgeCeActivities; import org.sonar.server.computation.task.projectanalysis.ProjectAnalysisTaskModule; import org.sonar.server.computation.taskprocessor.CeTaskProcessorModule; import org.sonar.server.debt.DebtModelPluginRepository; @@ -660,6 +661,7 @@ public class ComputeEngineContainerImpl implements ComputeEngineContainer { // RegisterIssueFilters.class, DB maintenance, responsibility of Web Server // RenameIssueWidgets.class, UI related, anyway, DB maintenance, responsibility of Web Server ServerLifecycleNotifier.class, + PurgeCeActivities.class, // DisplayLogOnDeprecatedProjects.class, responsibility of Web Server // ClearRulesOverloadedDebt.class, DB maintenance, responsibility of Web Server }; diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/queue/PurgeCeActivities.java b/server/sonar-server/src/main/java/org/sonar/server/computation/queue/PurgeCeActivities.java new file mode 100644 index 00000000000..84a68ff8bef --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/queue/PurgeCeActivities.java @@ -0,0 +1,65 @@ +/* + * SonarQube + * Copyright (C) 2009-2016 SonarSource SA + * mailto:contact 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. + */ +package org.sonar.server.computation.queue; + +import java.util.Calendar; +import java.util.Set; +import org.sonar.api.ce.ComputeEngineSide; +import org.sonar.api.platform.Server; +import org.sonar.api.platform.ServerStartHandler; +import org.sonar.api.utils.System2; +import org.sonar.api.utils.log.Logger; +import org.sonar.api.utils.log.Loggers; +import org.sonar.core.util.stream.Collectors; +import org.sonar.db.DbClient; +import org.sonar.db.DbSession; +import org.sonar.db.ce.CeActivityDto; + +@ComputeEngineSide +public class PurgeCeActivities implements ServerStartHandler { + + private static final Logger LOGGER = Loggers.get(PurgeCeActivities.class); + + private final DbClient dbClient; + private final System2 system2; + + public PurgeCeActivities(DbClient dbClient, System2 system2) { + this.dbClient = dbClient; + this.system2 = system2; + } + + @Override + public void onServerStart(Server server) { + try (DbSession dbSession = dbClient.openSession(false)) { + Calendar sixMonthsAgo = Calendar.getInstance(); + sixMonthsAgo.setTimeInMillis(system2.now()); + sixMonthsAgo.add(Calendar.DATE, -180); + + LOGGER.info("Delete the Compute Engine tasks created before {}", sixMonthsAgo.getTime()); + Set<String> ceActivityUuids = dbClient.ceActivityDao().selectOlderThan(dbSession, sixMonthsAgo.getTimeInMillis()) + .stream() + .map(CeActivityDto::getUuid) + .collect(Collectors.toSet()); + dbClient.ceActivityDao().deleteByUuids(dbSession, ceActivityUuids); + dbClient.ceScannerContextDao().deleteByUuids(dbSession, ceActivityUuids); + dbSession.commit(); + } + } +} diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/PurgeCeActivitiesTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/PurgeCeActivitiesTest.java new file mode 100644 index 00000000000..e6d9f24da32 --- /dev/null +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/PurgeCeActivitiesTest.java @@ -0,0 +1,67 @@ +/* + * SonarQube + * Copyright (C) 2009-2016 SonarSource SA + * mailto:contact 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. + */ +package org.sonar.server.computation; + +import org.junit.Rule; +import org.junit.Test; +import org.sonar.api.platform.Server; +import org.sonar.api.utils.internal.TestSystem2; +import org.sonar.db.DbTester; +import org.sonar.db.ce.CeActivityDto; +import org.sonar.db.ce.CeQueueDto; +import org.sonar.db.ce.CeTaskTypes; +import org.sonar.server.computation.queue.PurgeCeActivities; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; + +public class PurgeCeActivitiesTest { + + private TestSystem2 system2 = new TestSystem2(); + + @Rule + public DbTester dbTester = DbTester.create(system2); + + private PurgeCeActivities underTest = new PurgeCeActivities(dbTester.getDbClient(), system2); + + @Test + public void delete_older_than_6_months() throws Exception { + insertWithDate("VERY_OLD", 1_000_000_000_000L); + insertWithDate("RECENT", 1_500_000_000_000L); + system2.setNow(1_500_000_000_100L); + + underTest.onServerStart(mock(Server.class)); + + assertThat(dbTester.getDbClient().ceActivityDao().selectByUuid(dbTester.getSession(), "VERY_OLD").isPresent()).isFalse(); + assertThat(dbTester.getDbClient().ceActivityDao().selectByUuid(dbTester.getSession(), "RECENT").isPresent()).isTrue(); + } + + private void insertWithDate(String uuid, long date) { + CeQueueDto queueDto = new CeQueueDto(); + queueDto.setUuid(uuid); + queueDto.setTaskType(CeTaskTypes.REPORT); + + CeActivityDto dto = new CeActivityDto(queueDto); + dto.setStatus(CeActivityDto.Status.SUCCESS); + system2.setNow(date); + dbTester.getDbClient().ceActivityDao().insert(dbTester.getSession(), dto); + dbTester.getSession().commit(); + } +} |