]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-7903 delete old reports from FS
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Fri, 5 Aug 2016 08:12:06 +0000 (10:12 +0200)
committerSimon Brandhof <simon.brandhof@sonarsource.com>
Fri, 5 Aug 2016 13:45:01 +0000 (15:45 +0200)
server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelStartup.java
server/sonar-server/src/main/java/org/sonar/server/startup/DeleteOldAnalysisReportsFromFs.java [new file with mode: 0644]
server/sonar-server/src/test/java/org/sonar/server/startup/DeleteOldAnalysisReportsFromFsTest.java [new file with mode: 0644]

index a71f3f50e2f3a9a5104716eab6dfa92f005771d0..67fa802f2ad12b69b2d69965421ea79c4d2c0151 100644 (file)
@@ -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 (file)
index 0000000..21ad5d9
--- /dev/null
@@ -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 (file)
index 0000000..c3e6e48
--- /dev/null
@@ -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"), ""));
+  }
+}