From: Simon Brandhof Date: Fri, 5 Aug 2016 08:12:06 +0000 (+0200) Subject: SONAR-7903 delete old reports from FS X-Git-Tag: 6.1-RC1~446 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=c766c04bdceaefb84a351c15524c7746780de664;p=sonarqube.git SONAR-7903 delete old reports from FS --- diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelStartup.java b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelStartup.java index a71f3f50e2f..67fa802f2ad 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelStartup.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelStartup.java @@ -30,6 +30,7 @@ import org.sonar.server.qualitygate.RegisterQualityGates; import org.sonar.server.qualityprofile.RegisterQualityProfiles; import org.sonar.server.rule.RegisterRules; import org.sonar.server.startup.ClearRulesOverloadedDebt; +import org.sonar.server.startup.DeleteOldAnalysisReportsFromFs; import org.sonar.server.startup.DisplayLogOnDeprecatedProjects; import org.sonar.server.startup.FeedUsersLocalStartupTask; import org.sonar.server.startup.GeneratePluginIndex; @@ -68,6 +69,7 @@ public class PlatformLevelStartup extends PlatformLevel { RenameIssueWidgets.class, DisplayLogOnDeprecatedProjects.class, ClearRulesOverloadedDebt.class, + DeleteOldAnalysisReportsFromFs.class, FeedUsersLocalStartupTask.class); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/startup/DeleteOldAnalysisReportsFromFs.java b/server/sonar-server/src/main/java/org/sonar/server/startup/DeleteOldAnalysisReportsFromFs.java new file mode 100644 index 00000000000..21ad5d99747 --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/startup/DeleteOldAnalysisReportsFromFs.java @@ -0,0 +1,57 @@ +/* + * 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.startup; + +import java.io.File; +import org.picocontainer.Startable; +import org.sonar.api.platform.ServerUpgradeStatus; +import org.sonar.api.utils.log.Loggers; +import org.sonar.server.platform.ServerFileSystem; + +import static org.sonar.core.util.FileUtils.deleteQuietly; + +/** + * SONAR-7903 analysis reports are moved from file system to + * database. This task cleans up the directory. + */ +public class DeleteOldAnalysisReportsFromFs implements Startable { + + private final ServerUpgradeStatus upgradeStatus; + private final ServerFileSystem fs; + + public DeleteOldAnalysisReportsFromFs(ServerUpgradeStatus upgradeStatus, ServerFileSystem fs) { + this.upgradeStatus = upgradeStatus; + this.fs = fs; + } + + @Override + public void start() { + if (upgradeStatus.isUpgraded()) { + File dir = new File(fs.getDataDir(), "ce/reports"); + Loggers.get(getClass()).info("Delete unused directory of analysis reports: " + dir); + deleteQuietly(dir); + } + } + + @Override + public void stop() { + // do nothing + } +} diff --git a/server/sonar-server/src/test/java/org/sonar/server/startup/DeleteOldAnalysisReportsFromFsTest.java b/server/sonar-server/src/test/java/org/sonar/server/startup/DeleteOldAnalysisReportsFromFsTest.java new file mode 100644 index 00000000000..c3e6e485265 --- /dev/null +++ b/server/sonar-server/src/test/java/org/sonar/server/startup/DeleteOldAnalysisReportsFromFsTest.java @@ -0,0 +1,91 @@ +/* + * 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.startup; + +import java.io.File; +import org.assertj.core.api.Condition; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.rules.TemporaryFolder; +import org.sonar.api.platform.ServerUpgradeStatus; +import org.sonar.api.utils.log.LogTester; +import org.sonar.api.utils.log.LoggerLevel; +import org.sonar.server.platform.ServerFileSystem; + +import static org.apache.commons.io.FileUtils.touch; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class DeleteOldAnalysisReportsFromFsTest { + + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + @Rule + public TemporaryFolder temp = new TemporaryFolder(); + + @Rule + public LogTester logTester = new LogTester(); + + private ServerUpgradeStatus status = mock(ServerUpgradeStatus.class); + private ServerFileSystem fs = mock(ServerFileSystem.class); + private DeleteOldAnalysisReportsFromFs underTest = new DeleteOldAnalysisReportsFromFs(status, fs); + private File dataDir = null; + private File reportsDir = null; + + @Before + public void setUp() throws Exception { + dataDir = temp.newFolder(); + reportsDir = new File(dataDir, "ce/reports"); + touch(new File(reportsDir, "report1.zip")); + when(fs.getDataDir()).thenReturn(dataDir); + } + + @After + public void tearDown() { + underTest.stop(); + } + + @Test + public void do_nothing_on_regular_startups() { + when(status.isUpgraded()).thenReturn(false); + + underTest.start(); + + assertThat(reportsDir).exists().isDirectory(); + assertThat(dataDir).exists().isDirectory(); + assertThat(logTester.logs(LoggerLevel.INFO)).isEmpty(); + } + + @Test + public void delete_reports_directory_if_upgrade() { + when(status.isUpgraded()).thenReturn(true); + + underTest.start(); + + assertThat(reportsDir).doesNotExist(); + assertThat(dataDir).exists().isDirectory(); + assertThat(logTester.logs(LoggerLevel.INFO)).have(new Condition<>(s -> s.contains("Delete unused directory of analysis reports"), "")); + } +}