summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DbCleanerPlugin.java89
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DeprecatedDefaultPurgeTask.java52
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/DbCleanerConstants.java13
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/PurgeTask.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportQueue.java1
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportTaskLauncher.java18
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java17
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/ComputationStep.java (renamed from server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportStep.java)2
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/ComputationStepRegistry.java44
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/DbCleanerStep.java (renamed from plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/ProjectPurgePostJob.java)21
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/GetAndSetProjectStep.java41
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/IndexProjectIssuesStep.java2
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/SwitchSnapshotStep.java2
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/SynchronizeProjectPermissionsStep.java18
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java15
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportLogMediumTest.java5
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportQueueMediumTest.java2
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/ComputationServiceTest.java33
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/ComputationStepRegistryTest.java53
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/DbCleanStepTest.java41
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/DbCleanerStepTest.java56
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/GetAndSetProjectStepTest.java67
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/SynchronizeProjectPermissionsStepMediumTest.java3
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java6
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/ws/ActiveAnalysisReportsActionTest.java1
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/any-analysis-reports.xml3
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/book_available_report_analysis_while_having_one_working_on_another_project.xml2
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/insert-result.xml4
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_analysis_report.xml1
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_available_analysis.xml2
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_available_analysis_but_another_busy_on_same_project.xml2
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_busy_report_analysis.xml1
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select-with-no-available-report.xml3
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select.xml3
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select_oldest_available_report.xml3
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select_oldest_available_report_with_working_reports_older.xml3
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/three_analysis_reports.xml3
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending-result.xml6
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending.xml3
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/computation/ws/ActiveAnalysisReportsActionTest/list_active_reports.json2
-rw-r--r--sonar-core/src/main/java/org/sonar/core/computation/db/AnalysisReportDto.java25
-rw-r--r--sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/DbCleanerConstants.java34
-rw-r--r--sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/DbCleanerProperties.java105
-rw-r--r--sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/DefaultPurgeTask.java (renamed from plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DefaultPurgeTask.java)15
-rw-r--r--sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/period/DefaultPeriodCleaner.java (renamed from plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/DefaultPeriodCleaner.java)3
-rw-r--r--sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/period/DeleteAllFilter.java (renamed from plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/DeleteAllFilter.java)3
-rw-r--r--sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/period/Filter.java (renamed from plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Filter.java)3
-rw-r--r--sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/period/Filters.java (renamed from plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Filters.java)13
-rw-r--r--sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/period/Interval.java (renamed from plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Interval.java)3
-rw-r--r--sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/period/KeepOneFilter.java (renamed from plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/KeepOneFilter.java)3
-rw-r--r--sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/period/package-info.java (renamed from plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/package-info.java)3
-rw-r--r--sonar-core/src/main/java/org/sonar/core/config/CorePropertyDefinitions.java4
-rw-r--r--sonar-core/src/main/resources/org/sonar/core/computation/db/AnalysisReportMapper.xml5
-rw-r--r--sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/DbCleanerPropertiesTest.java (renamed from plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DbCleanerPluginTest.java)7
-rw-r--r--sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/DbCleanerTestUtils.java (renamed from plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DbCleanerTestUtils.java)3
-rw-r--r--sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/DefaultPurgeTaskTest.java (renamed from plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DefaultPurgeTaskTest.java)19
-rw-r--r--sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/period/DefaultPeriodCleanerTest.java (renamed from plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/DefaultPeriodCleanerTest.java)8
-rw-r--r--sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/period/DeleteAllFilterTest.java (renamed from plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/DeleteAllFilterTest.java)5
-rw-r--r--sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/period/IntervalTest.java (renamed from plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/IntervalTest.java)35
-rw-r--r--sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/period/KeepOneFilterTest.java (renamed from plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/KeepOneFilterTest.java)23
60 files changed, 680 insertions, 288 deletions
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DbCleanerPlugin.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DbCleanerPlugin.java
index 01397e6be89..56cad6f8a84 100644
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DbCleanerPlugin.java
+++ b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DbCleanerPlugin.java
@@ -17,98 +17,27 @@
* 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.plugins.dbcleaner;
import com.google.common.collect.ImmutableList;
-import org.sonar.api.CoreProperties;
-import org.sonar.api.PropertyType;
+import com.google.common.collect.Lists;
import org.sonar.api.SonarPlugin;
import org.sonar.api.config.PropertyDefinition;
-import org.sonar.api.resources.Qualifiers;
-import org.sonar.plugins.dbcleaner.api.DbCleanerConstants;
-import org.sonar.plugins.dbcleaner.period.DefaultPeriodCleaner;
+import org.sonar.core.computation.dbcleaner.period.DefaultPeriodCleaner;
-import java.util.Arrays;
import java.util.List;
+@Deprecated
public final class DbCleanerPlugin extends SonarPlugin {
+ static List<PropertyDefinition> propertyDefinitions() {
+ return Lists.newArrayList();
+ }
+
@Override
public List getExtensions() {
- return ImmutableList.builder().add(DefaultPeriodCleaner.class, DefaultPurgeTask.class, ProjectPurgePostJob.class)
+ return ImmutableList.builder().add(DefaultPeriodCleaner.class, DeprecatedDefaultPurgeTask.class)
.addAll(propertyDefinitions()).build();
}
-
- static List<PropertyDefinition> propertyDefinitions() {
- return Arrays.asList(
- PropertyDefinition.builder(DbCleanerConstants.PROPERTY_CLEAN_DIRECTORY)
- .defaultValue("true")
- .name("Clean directory/package history")
- .description("If set to true, no history is kept at directory/package level. Setting this to false can cause database bloat.")
- .type(PropertyType.BOOLEAN)
- .onQualifiers(Qualifiers.PROJECT)
- .category(CoreProperties.CATEGORY_GENERAL)
- .subCategory(CoreProperties.SUBCATEGORY_DATABASE_CLEANER)
- .index(1)
- .build(),
-
- PropertyDefinition.builder(DbCleanerConstants.DAYS_BEFORE_DELETING_CLOSED_ISSUES)
- .defaultValue("30")
- .name("Delete closed issues after")
- .description("Issues that have been closed for more than this number of days will be deleted.")
- .type(PropertyType.INTEGER)
- .onQualifiers(Qualifiers.PROJECT)
- .category(CoreProperties.CATEGORY_GENERAL)
- .subCategory(CoreProperties.SUBCATEGORY_DATABASE_CLEANER)
- .index(2)
- .build(),
-
- PropertyDefinition.builder(DbCleanerConstants.HOURS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_DAY)
- .defaultValue("24")
- .name("Keep only one snapshot a day after")
- .description("After this number of hours, if there are several snapshots during the same day, "
- + "the DbCleaner keeps the most recent one and fully deletes the other ones.")
- .type(PropertyType.INTEGER)
- .onQualifiers(Qualifiers.PROJECT)
- .category(CoreProperties.CATEGORY_GENERAL)
- .subCategory(CoreProperties.SUBCATEGORY_DATABASE_CLEANER)
- .index(3)
- .build(),
-
- PropertyDefinition.builder(DbCleanerConstants.WEEKS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_WEEK)
- .defaultValue("4")
- .name("Keep only one snapshot a week after")
- .description("After this number of weeks, if there are several snapshots during the same week, "
- + "the DbCleaner keeps the most recent one and fully deletes the other ones")
- .type(PropertyType.INTEGER)
- .onQualifiers(Qualifiers.PROJECT)
- .category(CoreProperties.CATEGORY_GENERAL)
- .subCategory(CoreProperties.SUBCATEGORY_DATABASE_CLEANER)
- .index(4)
- .build(),
-
- PropertyDefinition.builder(DbCleanerConstants.WEEKS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_MONTH)
- .defaultValue("52")
- .name("Keep only one snapshot a month after")
- .description("After this number of weeks, if there are several snapshots during the same month, "
- + "the DbCleaner keeps the most recent one and fully deletes the other ones.")
- .type(PropertyType.INTEGER)
- .onQualifiers(Qualifiers.PROJECT)
- .category(CoreProperties.CATEGORY_GENERAL)
- .subCategory(CoreProperties.SUBCATEGORY_DATABASE_CLEANER)
- .index(5)
- .build(),
-
- PropertyDefinition.builder(DbCleanerConstants.WEEKS_BEFORE_DELETING_ALL_SNAPSHOTS)
- .defaultValue("260")
- .name("Delete all snapshots after")
- .description("After this number of weeks, all snapshots are fully deleted.")
- .type(PropertyType.INTEGER)
- .onQualifiers(Qualifiers.PROJECT)
- .category(CoreProperties.CATEGORY_GENERAL)
- .subCategory(CoreProperties.SUBCATEGORY_DATABASE_CLEANER)
- .index(6)
- .build()
- );
- }
}
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DeprecatedDefaultPurgeTask.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DeprecatedDefaultPurgeTask.java
new file mode 100644
index 00000000000..50e340bc1c1
--- /dev/null
+++ b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DeprecatedDefaultPurgeTask.java
@@ -0,0 +1,52 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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.plugins.dbcleaner;
+
+import org.sonar.api.config.Settings;
+import org.sonar.core.computation.dbcleaner.DefaultPurgeTask;
+import org.sonar.core.computation.dbcleaner.period.DefaultPeriodCleaner;
+import org.sonar.core.purge.PurgeDao;
+import org.sonar.core.purge.PurgeProfiler;
+import org.sonar.plugins.dbcleaner.api.PurgeTask;
+
+/**
+ * @since 2.14
+ */
+@Deprecated
+public class DeprecatedDefaultPurgeTask implements PurgeTask {
+ private final DefaultPurgeTask defaultPurgeTask;
+
+ public DeprecatedDefaultPurgeTask(PurgeDao purgeDao, Settings settings, DefaultPeriodCleaner periodCleaner, PurgeProfiler profiler) {
+ defaultPurgeTask = new DefaultPurgeTask(purgeDao, settings, periodCleaner, profiler);
+ }
+
+ @Override
+ public DeprecatedDefaultPurgeTask delete(long resourceId) {
+ defaultPurgeTask.delete(resourceId);
+ return this;
+ }
+
+ @Override
+ public DeprecatedDefaultPurgeTask purge(long resourceId) {
+ defaultPurgeTask.purge(resourceId);
+ return this;
+ }
+}
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/DbCleanerConstants.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/DbCleanerConstants.java
index 7f77420e2f8..881fca768a3 100644
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/DbCleanerConstants.java
+++ b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/DbCleanerConstants.java
@@ -19,15 +19,6 @@
*/
package org.sonar.plugins.dbcleaner.api;
-public interface DbCleanerConstants {
-
- String PLUGIN_KEY = "dbcleaner";
- String PLUGIN_NAME = "DbCleaner";
- String PROPERTY_CLEAN_DIRECTORY = "sonar.dbcleaner.cleanDirectory";
-
- String HOURS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_DAY = "sonar.dbcleaner.hoursBeforeKeepingOnlyOneSnapshotByDay";
- String WEEKS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_WEEK = "sonar.dbcleaner.weeksBeforeKeepingOnlyOneSnapshotByWeek";
- String WEEKS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_MONTH = "sonar.dbcleaner.weeksBeforeKeepingOnlyOneSnapshotByMonth";
- String WEEKS_BEFORE_DELETING_ALL_SNAPSHOTS = "sonar.dbcleaner.weeksBeforeDeletingAllSnapshots";
- String DAYS_BEFORE_DELETING_CLOSED_ISSUES = "sonar.dbcleaner.daysBeforeDeletingClosedIssues";
+@Deprecated
+public interface DbCleanerConstants extends org.sonar.core.computation.dbcleaner.DbCleanerConstants {
}
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/PurgeTask.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/PurgeTask.java
index eec483cc45e..810608f6069 100644
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/PurgeTask.java
+++ b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/PurgeTask.java
@@ -19,18 +19,18 @@
*/
package org.sonar.plugins.dbcleaner.api;
-import org.sonar.api.task.TaskExtension;
-
import com.google.common.annotations.Beta;
+import org.sonar.api.task.TaskExtension;
/**
* @since 2.14
*/
@Beta
+@Deprecated
public interface PurgeTask extends TaskExtension {
/**
* Purges the data related to a tree of resources.
- *
+ * <p/>
* Exceptions are logged and are not thrown again, so this method fails only on {@link Error}s.
*
* @param resourceId the root of the tree
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportQueue.java b/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportQueue.java
index 06a721129db..2f2f78a39ee 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportQueue.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportQueue.java
@@ -69,7 +69,6 @@ public class AnalysisReportQueue implements ServerComponent {
private AnalysisReportDto newPendingAnalysisReport(String projectKey) {
return new AnalysisReportDto()
.setProjectKey(projectKey)
- .setProjectName(projectKey)
.setStatus(PENDING);
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportTaskLauncher.java b/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportTaskLauncher.java
index 642b5d9adb1..f2cf9c3f584 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportTaskLauncher.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportTaskLauncher.java
@@ -50,13 +50,7 @@ public class AnalysisReportTaskLauncher implements Startable, ServerComponent, S
public AnalysisReportTaskLauncher(ComputationService service, AnalysisReportQueue queue) {
this.service = service;
this.queue = queue;
-
- // all threads are named "ar-xxx", so they can have a dedicated logging output
- // (see SwitchLogbackAppender)
- ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
- .setNameFormat(ANALYSIS_REPORT_THREAD_NAME_PREFIX + "%d").setPriority(Thread.MIN_PRIORITY).build();
-
- this.executorService = Executors.newSingleThreadScheduledExecutor(namedThreadFactory);
+ this.executorService = Executors.newSingleThreadScheduledExecutor(threadFactoryWithSpecificNameForLogging());
this.delayBetweenTasks = 10;
this.delayForFirstStart = 0;
@@ -66,7 +60,7 @@ public class AnalysisReportTaskLauncher implements Startable, ServerComponent, S
@VisibleForTesting
AnalysisReportTaskLauncher(ComputationService service, AnalysisReportQueue queue, long delayForFirstStart, long delayBetweenTasks, TimeUnit timeUnit) {
this.queue = queue;
- this.executorService = Executors.newSingleThreadScheduledExecutor();
+ this.executorService = Executors.newSingleThreadScheduledExecutor(threadFactoryWithSpecificNameForLogging());
this.delayBetweenTasks = delayBetweenTasks;
this.delayForFirstStart = delayForFirstStart;
@@ -74,6 +68,14 @@ public class AnalysisReportTaskLauncher implements Startable, ServerComponent, S
this.service = service;
}
+ /**
+ * @see org.sonar.server.platform.SwitchLogbackAppender
+ */
+ private ThreadFactory threadFactoryWithSpecificNameForLogging() {
+ return new ThreadFactoryBuilder()
+ .setNameFormat(ANALYSIS_REPORT_THREAD_NAME_PREFIX + "%d").setPriority(Thread.MIN_PRIORITY).build();
+ }
+
@Override
public void start() {
// do nothing because we want to wait for the server to finish startup
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java b/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java
index e0dc2742290..f0cd88be1f0 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java
@@ -31,16 +31,11 @@ import org.sonar.server.db.DbClient;
*/
public class ComputationService implements ServerComponent {
private final DbClient dbClient;
- private final SynchronizeProjectPermissionsStep synchronizeProjectPermissionsStep;
- private final IndexProjectIssuesStep indexProjectIssuesStep;
- private final SwitchSnapshotStep switchSnapshotStep;
+ private final ComputationStepRegistry stepRegistry;
- public ComputationService(DbClient dbClient, SynchronizeProjectPermissionsStep synchronizeProjectPermissionsStep,
- IndexProjectIssuesStep indexProjectIssuesStep, SwitchSnapshotStep switchSnapshotStep) {
+ public ComputationService(DbClient dbClient, ComputationStepRegistry stepRegistry) {
this.dbClient = dbClient;
- this.synchronizeProjectPermissionsStep = synchronizeProjectPermissionsStep;
- this.indexProjectIssuesStep = indexProjectIssuesStep;
- this.switchSnapshotStep = switchSnapshotStep;
+ this.stepRegistry = stepRegistry;
}
public void analyzeReport(AnalysisReportDto report) {
@@ -48,9 +43,9 @@ public class ComputationService implements ServerComponent {
DbSession session = dbClient.openSession(true);
try {
- synchronizeProjectPermissionsStep.execute(session, report);
- indexProjectIssuesStep.execute(session, report);
- switchSnapshotStep.execute(session, report);
+ for (ComputationStep step : stepRegistry.steps()) {
+ step.execute(session, report);
+ }
} finally {
MyBatis.closeQuietly(session);
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationStep.java
index 2408bf3b402..d4cb50bda25 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportStep.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationStep.java
@@ -24,6 +24,6 @@ import org.sonar.api.ServerComponent;
import org.sonar.core.computation.db.AnalysisReportDto;
import org.sonar.core.persistence.DbSession;
-public interface AnalysisReportStep extends ServerComponent {
+public interface ComputationStep extends ServerComponent {
void execute(DbSession session, AnalysisReportDto analysisReportDto);
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationStepRegistry.java b/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationStepRegistry.java
new file mode 100644
index 00000000000..c4f21a948ef
--- /dev/null
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationStepRegistry.java
@@ -0,0 +1,44 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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 com.google.common.collect.ImmutableList;
+import org.sonar.api.ServerComponent;
+
+import java.util.List;
+
+public class ComputationStepRegistry implements ServerComponent {
+
+ private final List<ComputationStep> steps;
+
+ public ComputationStepRegistry(
+ GetAndSetProjectStep getAndSetProjectStep,
+ SynchronizeProjectPermissionsStep synchronizeProjectPermissionsStep,
+ IndexProjectIssuesStep indexProjectIssuesStep,
+ SwitchSnapshotStep switchSnapshotStep,
+ DbCleanerStep dbCleanerStep) {
+ steps = ImmutableList.of(getAndSetProjectStep, synchronizeProjectPermissionsStep, indexProjectIssuesStep, switchSnapshotStep, dbCleanerStep);
+ }
+
+ public List<ComputationStep> steps() {
+ return steps;
+ }
+}
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/ProjectPurgePostJob.java b/server/sonar-server/src/main/java/org/sonar/server/computation/DbCleanerStep.java
index 1a412bcda8a..6556b5cb28f 100644
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/ProjectPurgePostJob.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/DbCleanerStep.java
@@ -17,25 +17,22 @@
* 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.plugins.dbcleaner;
-import org.sonar.api.batch.PostJob;
-import org.sonar.api.batch.SensorContext;
-import org.sonar.api.resources.Project;
-import org.sonar.core.DryRunIncompatible;
-import org.sonar.plugins.dbcleaner.api.PurgeTask;
+package org.sonar.server.computation;
-@DryRunIncompatible
-public class ProjectPurgePostJob implements PostJob {
+import org.sonar.core.computation.db.AnalysisReportDto;
+import org.sonar.core.computation.dbcleaner.DefaultPurgeTask;
+import org.sonar.core.persistence.DbSession;
- private PurgeTask purgeTask;
+public class DbCleanerStep implements ComputationStep {
+ private final DefaultPurgeTask purgeTask;
- public ProjectPurgePostJob(PurgeTask purgeTask) {
+ public DbCleanerStep(DefaultPurgeTask purgeTask) {
this.purgeTask = purgeTask;
}
@Override
- public void executeOn(final Project project, SensorContext context) {
- purgeTask.purge(project.getId());
+ public void execute(DbSession session, AnalysisReportDto report) {
+ purgeTask.purge(report.getProject().getId());
}
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/GetAndSetProjectStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/GetAndSetProjectStep.java
new file mode 100644
index 00000000000..7eb4091cab2
--- /dev/null
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/GetAndSetProjectStep.java
@@ -0,0 +1,41 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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.sonar.core.component.ComponentDto;
+import org.sonar.core.computation.db.AnalysisReportDto;
+import org.sonar.core.persistence.DbSession;
+import org.sonar.server.db.DbClient;
+
+public class GetAndSetProjectStep implements ComputationStep {
+
+ private final DbClient dbClient;
+
+ public GetAndSetProjectStep(DbClient dbClient) {
+ this.dbClient = dbClient;
+ }
+
+ @Override
+ public void execute(DbSession session, AnalysisReportDto report) {
+ ComponentDto project = dbClient.componentDao().getByKey(session, report.getProjectKey());
+ report.setProject(project);
+ }
+}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/IndexProjectIssuesStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/IndexProjectIssuesStep.java
index f49ad6c3fea..96fa7abbf3b 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/IndexProjectIssuesStep.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/IndexProjectIssuesStep.java
@@ -27,7 +27,7 @@ import org.sonar.server.db.DbClient;
import org.sonar.server.issue.index.IssueIndex;
import org.sonar.server.search.IndexClient;
-public class IndexProjectIssuesStep implements AnalysisReportStep {
+public class IndexProjectIssuesStep implements ComputationStep {
private final DbClient dbClient;
private final IndexClient index;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/SwitchSnapshotStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/SwitchSnapshotStep.java
index 7e0f0a6e955..368aeeed362 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/SwitchSnapshotStep.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/SwitchSnapshotStep.java
@@ -27,7 +27,7 @@ import org.sonar.server.component.db.SnapshotDao;
import java.util.List;
-public class SwitchSnapshotStep implements AnalysisReportStep {
+public class SwitchSnapshotStep implements ComputationStep {
private SnapshotDao dao;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/SynchronizeProjectPermissionsStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/SynchronizeProjectPermissionsStep.java
index 65efcd21924..14f0b44cf33 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/SynchronizeProjectPermissionsStep.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/SynchronizeProjectPermissionsStep.java
@@ -20,36 +20,30 @@
package org.sonar.server.computation;
-import org.sonar.core.component.AuthorizedComponentDto;
import org.sonar.core.computation.db.AnalysisReportDto;
import org.sonar.core.persistence.DbSession;
-import org.sonar.server.db.DbClient;
import org.sonar.server.issue.index.IssueAuthorizationIndex;
import org.sonar.server.permission.InternalPermissionService;
import org.sonar.server.search.IndexClient;
-public class SynchronizeProjectPermissionsStep implements AnalysisReportStep {
+public class SynchronizeProjectPermissionsStep implements ComputationStep {
private final IndexClient index;
- private final DbClient dbClient;
private final InternalPermissionService permissionService;
- public SynchronizeProjectPermissionsStep(IndexClient index, DbClient dbClient, InternalPermissionService permissionService) {
+ public SynchronizeProjectPermissionsStep(IndexClient index, InternalPermissionService permissionService) {
this.index = index;
- this.dbClient = dbClient;
this.permissionService = permissionService;
}
@Override
public void execute(DbSession session, AnalysisReportDto report) {
- synchronizeProjectPermissionsIfNotFound(session, report.getProjectKey());
+ synchronizeProjectPermissionsIfNotFound(session, report);
}
- private void synchronizeProjectPermissionsIfNotFound(DbSession session, String projectKey) {
- if (index.get(IssueAuthorizationIndex.class).getNullableByKey(projectKey) == null) {
- // TODO Remove this db call by inserting the project uuid in the report
- AuthorizedComponentDto project = dbClient.componentDao().getAuthorizedComponentByKey(projectKey, session);
- permissionService.synchronizePermissions(session, project.uuid());
+ private void synchronizeProjectPermissionsIfNotFound(DbSession session, AnalysisReportDto report) {
+ if (index.get(IssueAuthorizationIndex.class).getNullableByKey(report.getProjectKey()) == null) {
+ permissionService.synchronizePermissions(session, report.getProject().uuid());
session.commit();
}
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java b/server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java
index dd8b3a9877d..0288b69d3bb 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java
@@ -37,6 +37,8 @@ import org.sonar.api.utils.System2;
import org.sonar.api.utils.UriReader;
import org.sonar.api.utils.internal.TempFolderCleaner;
import org.sonar.core.component.SnapshotPerspectives;
+import org.sonar.core.computation.dbcleaner.DefaultPurgeTask;
+import org.sonar.core.computation.dbcleaner.period.DefaultPeriodCleaner;
import org.sonar.core.config.CorePropertyDefinitions;
import org.sonar.core.config.Logback;
import org.sonar.core.i18n.DefaultI18n;
@@ -271,7 +273,7 @@ class ServerComponents {
ActivityNormalizer.class,
ActivityIndex.class,
ActivityDao.class
- ));
+ ));
components.addAll(CorePropertyDefinitions.all());
components.addAll(DatabaseMigrations.CLASSES);
components.addAll(DaoUtils.getDaoClasses());
@@ -304,7 +306,7 @@ class ServerComponents {
// ws
RestartHandler.class,
SystemWs.class
- );
+ );
}
/**
@@ -321,7 +323,7 @@ class ServerComponents {
HttpDownloader.class,
UriReader.class,
ServerIdGenerator.class
- );
+ );
}
void startLevel4Components(ComponentContainer pico) {
@@ -591,15 +593,20 @@ class ServerComponents {
// Compute engine
pico.addSingleton(ComputationService.class);
- pico.addSingleton(SwitchSnapshotStep.class);
+ pico.addSingleton(ComputationStepRegistry.class);
+ pico.addSingleton(GetAndSetProjectStep.class);
pico.addSingleton(SynchronizeProjectPermissionsStep.class);
pico.addSingleton(IndexProjectIssuesStep.class);
+ pico.addSingleton(SwitchSnapshotStep.class);
+ pico.addSingleton(DbCleanerStep.class);
pico.add(AnalysisReportQueue.class);
pico.addSingleton(AnalysisReportTaskLauncher.class);
pico.addSingleton(AnalysisReportWebService.class);
pico.addSingleton(ActiveAnalysisReportsAction.class);
pico.addSingleton(IsAnalysisReportQueueEmptyAction.class);
pico.addSingleton(AnalysisReportHistorySearchAction.class);
+ pico.addSingleton(DefaultPurgeTask.class);
+ pico.addSingleton(DefaultPeriodCleaner.class);
for (Object components : level4AddedComponents) {
pico.addSingleton(components);
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportLogMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportLogMediumTest.java
index 0e4f2363a8c..bf98168e8b2 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportLogMediumTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportLogMediumTest.java
@@ -31,6 +31,7 @@ import org.sonar.core.computation.db.AnalysisReportDto;
import org.sonar.core.persistence.DbSession;
import org.sonar.server.activity.ActivityService;
import org.sonar.server.activity.index.ActivityIndex;
+import org.sonar.server.component.ComponentTesting;
import org.sonar.server.db.DbClient;
import org.sonar.server.tester.ServerTester;
@@ -65,12 +66,12 @@ public class AnalysisReportLogMediumTest {
public void insert_find_analysis_report_log() {
AnalysisReportDto report = AnalysisReportDto.newForTests(1L)
.setProjectKey("projectKey")
- .setProjectName("projectName")
.setStatus(FAILED)
.setCreatedAt(DateUtils.parseDate("2014-10-15"))
.setUpdatedAt(DateUtils.parseDate("2014-10-16"))
.setStartedAt(DateUtils.parseDate("2014-10-17"))
- .setFinishedAt(DateUtils.parseDate("2014-10-18"));
+ .setFinishedAt(DateUtils.parseDate("2014-10-18"))
+ .setProject(ComponentTesting.newProjectDto());
service.write(dbSession, ANALYSIS_REPORT, new AnalysisReportLog(report));
dbSession.commit();
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportQueueMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportQueueMediumTest.java
index 050330acba4..2e12107a20b 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportQueueMediumTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportQueueMediumTest.java
@@ -35,6 +35,7 @@ import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.MyBatis;
import org.sonar.core.user.UserDto;
import org.sonar.server.activity.index.ActivityIndex;
+import org.sonar.server.component.ComponentTesting;
import org.sonar.server.db.DbClient;
import org.sonar.server.exceptions.ForbiddenException;
import org.sonar.server.tester.ServerTester;
@@ -155,6 +156,7 @@ public class AnalysisReportQueueMediumTest {
insertPermissionsForProject(DEFAULT_PROJECT_KEY);
sut.add(DEFAULT_PROJECT_KEY, 123L);
AnalysisReportDto report = sut.bookNextAvailable();
+ report.setProject(ComponentTesting.newProjectDto());
report.setStatus(SUCCESS);
sut.remove(report);
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/ComputationServiceTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/ComputationServiceTest.java
index 2910df14971..9a99ec197fb 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/ComputationServiceTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/ComputationServiceTest.java
@@ -20,6 +20,7 @@
package org.sonar.server.computation;
+import com.google.common.collect.Lists;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InOrder;
@@ -35,36 +36,30 @@ public class ComputationServiceTest {
private ComputationService sut;
private DbClient dbClient;
- private IndexProjectIssuesStep indexProjectIssuesStep;
- private SynchronizeProjectPermissionsStep synchronizeProjectPermissionsStep;
- private SwitchSnapshotStep switchSnapshotStep;
+ private ComputationStepRegistry stepRegistry;
@Before
public void before() {
this.dbClient = mock(DbClient.class);
+ this.stepRegistry = mock(ComputationStepRegistry.class);
- this.indexProjectIssuesStep = mock(IndexProjectIssuesStep.class);
- this.synchronizeProjectPermissionsStep = mock(SynchronizeProjectPermissionsStep.class);
- this.switchSnapshotStep = mock(SwitchSnapshotStep.class);
-
- this.sut = new ComputationService(dbClient, synchronizeProjectPermissionsStep, indexProjectIssuesStep, switchSnapshotStep);
+ this.sut = new ComputationService(dbClient, stepRegistry);
}
@Test
- public void all_my_steps_are_called_in_the_right_order() {
- sut.analyzeReport(AnalysisReportDto.newForTests(1L));
+ public void call_execute_method_of_my_registry() {
+ ComputationStep firstStep = mock(ComputationStep.class);
+ ComputationStep secondStep = mock(ComputationStep.class);
+ ComputationStep thirdStep = mock(ComputationStep.class);
- InOrder inOrder = inOrder(indexProjectIssuesStep, synchronizeProjectPermissionsStep, switchSnapshotStep);
+ when(stepRegistry.steps()).thenReturn(Lists.newArrayList(firstStep, secondStep, thirdStep));
- inOrder.verify(synchronizeProjectPermissionsStep).execute(any(DbSession.class), any(AnalysisReportDto.class));
- inOrder.verify(indexProjectIssuesStep).execute(any(DbSession.class), any(AnalysisReportDto.class));
- inOrder.verify(switchSnapshotStep).execute(any(DbSession.class), any(AnalysisReportDto.class));
- }
+ sut.analyzeReport(AnalysisReportDto.newForTests(1L));
- @Test(expected = IllegalStateException.class)
- public void computation_service_rethrows_exceptions() {
- doThrow(IllegalStateException.class).when(switchSnapshotStep).execute(any(DbSession.class), any(AnalysisReportDto.class));
+ InOrder order = inOrder(firstStep, secondStep, thirdStep);
- sut.analyzeReport(AnalysisReportDto.newForTests(1L));
+ order.verify(firstStep).execute(any(DbSession.class), any(AnalysisReportDto.class));
+ order.verify(secondStep).execute(any(DbSession.class), any(AnalysisReportDto.class));
+ order.verify(thirdStep).execute(any(DbSession.class), any(AnalysisReportDto.class));
}
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/ComputationStepRegistryTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/ComputationStepRegistryTest.java
new file mode 100644
index 00000000000..506db4804dc
--- /dev/null
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/ComputationStepRegistryTest.java
@@ -0,0 +1,53 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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.Before;
+import org.junit.Test;
+
+import static org.fest.assertions.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+
+public class ComputationStepRegistryTest {
+
+ private ComputationStepRegistry sut;
+ private GetAndSetProjectStep getAndSetProjectStep;
+ private SynchronizeProjectPermissionsStep synchronizeProjectPermissionsStep;
+ private IndexProjectIssuesStep indexProjectIssuesStep;
+ private SwitchSnapshotStep switchSnapshotStep;
+ private DbCleanerStep dbCleanerStep;
+
+ @Before
+ public void before() {
+ getAndSetProjectStep = mock(GetAndSetProjectStep.class);
+ synchronizeProjectPermissionsStep = mock(SynchronizeProjectPermissionsStep.class);
+ indexProjectIssuesStep = mock(IndexProjectIssuesStep.class);
+ switchSnapshotStep = mock(SwitchSnapshotStep.class);
+ dbCleanerStep = mock(DbCleanerStep.class);
+
+ sut = new ComputationStepRegistry(getAndSetProjectStep, synchronizeProjectPermissionsStep, indexProjectIssuesStep, switchSnapshotStep, dbCleanerStep);
+ }
+
+ @Test
+ public void steps_returned_in_the_right_order() throws Exception {
+ assertThat(sut.steps()).containsExactly(getAndSetProjectStep, synchronizeProjectPermissionsStep, indexProjectIssuesStep, switchSnapshotStep, dbCleanerStep);
+ }
+}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/DbCleanStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/DbCleanStepTest.java
new file mode 100644
index 00000000000..8e092313b50
--- /dev/null
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/DbCleanStepTest.java
@@ -0,0 +1,41 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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.Before;
+import org.sonar.api.config.Settings;
+import org.sonar.core.computation.dbcleaner.DefaultPurgeTask;
+import org.sonar.core.computation.dbcleaner.period.DefaultPeriodCleaner;
+import org.sonar.core.purge.PurgeDao;
+import org.sonar.core.purge.PurgeProfiler;
+
+import static org.mockito.Mockito.mock;
+
+public class DbCleanStepTest {
+
+ private DbCleanerStep sut;
+
+ @Before
+ public void before() {
+ sut = new DbCleanerStep(new DefaultPurgeTask(mock(PurgeDao.class), mock(Settings.class), mock(DefaultPeriodCleaner.class), mock(PurgeProfiler.class)));
+ }
+
+} \ No newline at end of file
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/DbCleanerStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/DbCleanerStepTest.java
new file mode 100644
index 00000000000..ec6a4373d54
--- /dev/null
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/DbCleanerStepTest.java
@@ -0,0 +1,56 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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.Before;
+import org.junit.Test;
+import org.sonar.core.component.AuthorizedComponentDto;
+import org.sonar.core.computation.db.AnalysisReportDto;
+import org.sonar.core.computation.dbcleaner.DefaultPurgeTask;
+import org.sonar.core.persistence.DbSession;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+public class DbCleanerStepTest {
+
+ private DbCleanerStep sut;
+ private DefaultPurgeTask purgeTask;
+
+ @Before
+ public void before() {
+ this.purgeTask = mock(DefaultPurgeTask.class);
+ this.sut = new DbCleanerStep(purgeTask);
+ }
+
+ @Test
+ public void call_purge_method_of_the_purge_task() {
+ AnalysisReportDto report = mock(AnalysisReportDto.class);
+ when(report.getProject()).thenReturn(mock(AuthorizedComponentDto.class));
+
+ sut.execute(mock(DbSession.class), report);
+
+ verify(purgeTask).purge(any(Long.class));
+ }
+
+}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/GetAndSetProjectStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/GetAndSetProjectStepTest.java
new file mode 100644
index 00000000000..561559d44d1
--- /dev/null
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/GetAndSetProjectStepTest.java
@@ -0,0 +1,67 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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.Before;
+import org.junit.Test;
+import org.sonar.core.component.ComponentDto;
+import org.sonar.core.computation.db.AnalysisReportDto;
+import org.sonar.core.persistence.DbSession;
+import org.sonar.server.component.ComponentTesting;
+import org.sonar.server.component.db.ComponentDao;
+import org.sonar.server.db.DbClient;
+
+import static org.fest.assertions.Assertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public class GetAndSetProjectStepTest {
+
+ private GetAndSetProjectStep sut;
+ private DbClient dbClient;
+ private ComponentDto project;
+ private DbSession session;
+
+ @Before
+ public void before() {
+ this.dbClient = mock(DbClient.class);
+ this.session = mock(DbSession.class);
+ this.project = ComponentTesting.newProjectDto();
+
+ ComponentDao componentDao = mock(ComponentDao.class);
+ when(dbClient.componentDao()).thenReturn(componentDao);
+ when(componentDao.getByKey(any(DbSession.class), anyString())).thenReturn(project);
+
+ this.sut = new GetAndSetProjectStep(dbClient);
+ }
+
+ @Test
+ public void set_project_return_by_dbclient() {
+ AnalysisReportDto report = new AnalysisReportDto().setProjectKey("123-456-789");
+
+ sut.execute(session, report);
+
+ assertThat(report.getProject()).isEqualTo(project);
+ }
+
+}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/SynchronizeProjectPermissionsStepMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/SynchronizeProjectPermissionsStepMediumTest.java
index 99edc5f88f9..c248b93e786 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/SynchronizeProjectPermissionsStepMediumTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/SynchronizeProjectPermissionsStepMediumTest.java
@@ -53,6 +53,7 @@ public class SynchronizeProjectPermissionsStepMediumTest {
private SynchronizeProjectPermissionsStep sut;
private AnalysisReportQueue queue;
+ private GetAndSetProjectStep getAndSetProjectStep;
private DbClient db;
private DbSession session;
private MockUserSession userSession;
@@ -63,6 +64,7 @@ public class SynchronizeProjectPermissionsStepMediumTest {
db = tester.get(DbClient.class);
session = db.openSession(false);
queue = tester.get(AnalysisReportQueue.class);
+ getAndSetProjectStep = tester.get(GetAndSetProjectStep.class);
sut = tester.get(SynchronizeProjectPermissionsStep.class);
@@ -88,6 +90,7 @@ public class SynchronizeProjectPermissionsStepMediumTest {
queue.add(DEFAULT_PROJECT_KEY, 123L);
List<AnalysisReportDto> reports = queue.findByProjectKey(DEFAULT_PROJECT_KEY);
+ getAndSetProjectStep.execute(session, reports.get(0));
sut.execute(session, reports.get(0));
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java
index 5aa270e5bfb..0c78f41524c 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java
@@ -59,8 +59,6 @@ public class AnalysisReportDaoTest {
this.sut = new AnalysisReportDao(system2);
when(system2.now()).thenReturn(DateUtils.parseDate("2014-09-26").getTime());
-
- db.prepareDbUnit(getClass(), "empty.xml");
}
@After
@@ -70,9 +68,10 @@ public class AnalysisReportDaoTest {
@Test
public void insert_multiple_reports() {
+ db.prepareDbUnit(getClass(), "empty.xml");
+
AnalysisReportDto report = new AnalysisReportDto()
.setProjectKey(DEFAULT_PROJECT_KEY)
- .setProjectName(DEFAULT_PROJECT_NAME)
.setSnapshotId(DEFAULT_SNAPSHOT_ID)
.setData("data-project")
.setStatus(PENDING)
@@ -169,7 +168,6 @@ public class AnalysisReportDaoTest {
AnalysisReportDto report = sut.getById(session, 1L);
assertThat(report.getProjectKey()).isEqualTo(DEFAULT_PROJECT_KEY);
- assertThat(report.getProjectName()).isEqualTo(DEFAULT_PROJECT_NAME);
assertThat(report.getCreatedAt()).isEqualTo(DateUtils.parseDate("2014-09-24"));
assertThat(report.getUpdatedAt()).isEqualTo(DateUtils.parseDate("2014-09-25"));
assertThat(report.getStartedAt()).isEqualTo(DateUtils.parseDate("2014-09-26"));
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/ws/ActiveAnalysisReportsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/ws/ActiveAnalysisReportsActionTest.java
index 56817de9884..f817a196065 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/ws/ActiveAnalysisReportsActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/ws/ActiveAnalysisReportsActionTest.java
@@ -51,7 +51,6 @@ public class ActiveAnalysisReportsActionTest {
public void list_active_reports() throws Exception {
AnalysisReportDto report = AnalysisReportDto
.newForTests(1L)
- .setProjectName("Project Name")
.setProjectKey("project-name")
.setStatus(PENDING)
.setData(null)
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/any-analysis-reports.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/any-analysis-reports.xml
index cb5e9a70c3f..235bdc82bf4 100644
--- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/any-analysis-reports.xml
+++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/any-analysis-reports.xml
@@ -2,7 +2,6 @@
<analysis_reports
id="1"
project_key="123456789-987654321"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="WORKING"
@@ -12,7 +11,6 @@
<analysis_reports
id="2"
project_key="123456789-987654321"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="WORKING"
@@ -22,7 +20,6 @@
<analysis_reports
id="3"
project_key="123456789-987654321"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="PENDING"
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/book_available_report_analysis_while_having_one_working_on_another_project.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/book_available_report_analysis_while_having_one_working_on_another_project.xml
index 001dfb1cd18..0ea21d7befe 100644
--- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/book_available_report_analysis_while_having_one_working_on_another_project.xml
+++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/book_available_report_analysis_while_having_one_working_on_another_project.xml
@@ -2,7 +2,6 @@
<analysis_reports
id="1"
project_key="123456789-987654321"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="PENDING"
@@ -12,7 +11,6 @@
<analysis_reports
id="2"
project_key="987654321-123456789"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="WORKING"
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/insert-result.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/insert-result.xml
index 189aa5a770c..28cd8bbe001 100644
--- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/insert-result.xml
+++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/insert-result.xml
@@ -2,7 +2,7 @@
<analysis_reports
id="1"
project_key="123456789-987654321"
- project_name="default project name"
+ project_name="[null]"
snapshot_id="123"
report_data="data-project"
report_status="PENDING"
@@ -14,7 +14,7 @@
<analysis_reports
id="2"
project_key="123456789-987654321"
- project_name="default project name"
+ project_name="[null]"
snapshot_id="123"
report_data="data-project"
report_status="PENDING"
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_analysis_report.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_analysis_report.xml
index fad68c874f3..d0288e72615 100644
--- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_analysis_report.xml
+++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_analysis_report.xml
@@ -2,7 +2,6 @@
<analysis_reports
id="1"
project_key="123456789-987654321"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="WORKING"
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_available_analysis.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_available_analysis.xml
index 8dfd1864cd9..93d6b5a6331 100644
--- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_available_analysis.xml
+++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_available_analysis.xml
@@ -2,7 +2,6 @@
<analysis_reports
id="1"
project_key="123456789-987654321"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="PENDING"
@@ -12,7 +11,6 @@
<analysis_reports
id="2"
project_key="123456789-987654321"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="PENDING"
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_available_analysis_but_another_busy_on_same_project.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_available_analysis_but_another_busy_on_same_project.xml
index 122cffa4607..5dd3839051e 100644
--- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_available_analysis_but_another_busy_on_same_project.xml
+++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_available_analysis_but_another_busy_on_same_project.xml
@@ -2,7 +2,6 @@
<analysis_reports
id="1"
project_key="123456789-987654321"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="PENDING"
@@ -12,7 +11,6 @@
<analysis_reports
id="2"
project_key="123456789-987654321"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="WORKING"
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_busy_report_analysis.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_busy_report_analysis.xml
index 423acd8cd6f..574cd7317f7 100644
--- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_busy_report_analysis.xml
+++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_busy_report_analysis.xml
@@ -2,7 +2,6 @@
<analysis_reports
id="1"
project_key="123456789-987654321"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="WORKING"
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select-with-no-available-report.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select-with-no-available-report.xml
index 9e7dfcc8966..a0d357a7dbd 100644
--- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select-with-no-available-report.xml
+++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select-with-no-available-report.xml
@@ -2,7 +2,6 @@
<analysis_reports
id="1"
project_key="111111111-987654321"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="WORKING"
@@ -12,7 +11,6 @@
<analysis_reports
id="2"
project_key="123456789-987654321"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="WORKING"
@@ -23,7 +21,6 @@
<analysis_reports
id="3"
project_key="123456789-987654321"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="PENDING"
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select.xml
index eb3156a8d6e..3a24ab33e37 100644
--- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select.xml
+++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select.xml
@@ -2,7 +2,6 @@
<analysis_reports
id="1"
project_key="123456789-987654321"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="WORKING"
@@ -12,7 +11,6 @@
<analysis_reports
id="2"
project_key="987654321-123456789"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="WORKING"
@@ -22,7 +20,6 @@
<analysis_reports
id="3"
project_key="987654321-123456789"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="PENDING"
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select_oldest_available_report.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select_oldest_available_report.xml
index c5ebf921ae6..d0e7d2a31d9 100644
--- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select_oldest_available_report.xml
+++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select_oldest_available_report.xml
@@ -2,7 +2,6 @@
<analysis_reports
id="1"
project_key="111111111-987654321"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="PENDING"
@@ -12,7 +11,6 @@
<analysis_reports
id="2"
project_key="123456789-987654321"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="PENDING"
@@ -22,7 +20,6 @@
<analysis_reports
id="3"
project_key="333333333-123456789"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="PENDING"
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select_oldest_available_report_with_working_reports_older.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select_oldest_available_report_with_working_reports_older.xml
index a5f42f4fbc3..94ff919df31 100644
--- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select_oldest_available_report_with_working_reports_older.xml
+++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/select_oldest_available_report_with_working_reports_older.xml
@@ -2,7 +2,6 @@
<analysis_reports
id="1"
project_key="111111111-987654321"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="WORKING"
@@ -12,7 +11,6 @@
<analysis_reports
id="2"
project_key="123456789-987654321"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="PENDING"
@@ -22,7 +20,6 @@
<analysis_reports
id="3"
project_key="333333333-123456789"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="WORKING"
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/three_analysis_reports.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/three_analysis_reports.xml
index eb3156a8d6e..3a24ab33e37 100644
--- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/three_analysis_reports.xml
+++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/three_analysis_reports.xml
@@ -2,7 +2,6 @@
<analysis_reports
id="1"
project_key="123456789-987654321"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="WORKING"
@@ -12,7 +11,6 @@
<analysis_reports
id="2"
project_key="987654321-123456789"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="WORKING"
@@ -22,7 +20,6 @@
<analysis_reports
id="3"
project_key="987654321-123456789"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="PENDING"
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending-result.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending-result.xml
index 4a32fbe8dd0..93c30ab664f 100644
--- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending-result.xml
+++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending-result.xml
@@ -2,7 +2,7 @@
<analysis_reports
id="1"
project_key="123456789-987654321"
- project_name="default project name"
+ project_name="[null]"
snapshot_id="123"
report_data="data-project"
report_status="PENDING"
@@ -14,7 +14,7 @@
<analysis_reports
id="2"
project_key="123456789-987654321"
- project_name="default project name"
+ project_name="[null]"
snapshot_id="123"
report_data="data-project"
report_status="PENDING"
@@ -26,7 +26,7 @@
<analysis_reports
id="3"
project_key="123456789-987654321"
- project_name="default project name"
+ project_name="[null]"
snapshot_id="123"
report_data="data-project"
report_status="PENDING"
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending.xml
index 71e67e7b911..ea47c0bd16e 100644
--- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending.xml
+++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending.xml
@@ -2,7 +2,6 @@
<analysis_reports
id="1"
project_key="123456789-987654321"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="WORKING"
@@ -14,7 +13,6 @@
<analysis_reports
id="2"
project_key="123456789-987654321"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="WORKING"
@@ -26,7 +24,6 @@
<analysis_reports
id="3"
project_key="123456789-987654321"
- project_name="default project name"
snapshot_id="123"
report_data="data-project"
report_status="PENDING"
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/ws/ActiveAnalysisReportsActionTest/list_active_reports.json b/server/sonar-server/src/test/resources/org/sonar/server/computation/ws/ActiveAnalysisReportsActionTest/list_active_reports.json
index e5bd54abf0a..a82f67d3e30 100644
--- a/server/sonar-server/src/test/resources/org/sonar/server/computation/ws/ActiveAnalysisReportsActionTest/list_active_reports.json
+++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/ws/ActiveAnalysisReportsActionTest/list_active_reports.json
@@ -3,7 +3,7 @@
{
"id": 1,
"status": "PENDING",
- "projectName": "Project Name",
+ "projectName": "project-name",
"project": "project-name",
"submittedAt": "2014-10-13T00:00:00+0200",
"startedAt": "2014-10-13T00:00:00+0200",
diff --git a/sonar-core/src/main/java/org/sonar/core/computation/db/AnalysisReportDto.java b/sonar-core/src/main/java/org/sonar/core/computation/db/AnalysisReportDto.java
index 82c4af9526d..1491a1ae19c 100644
--- a/sonar-core/src/main/java/org/sonar/core/computation/db/AnalysisReportDto.java
+++ b/sonar-core/src/main/java/org/sonar/core/computation/db/AnalysisReportDto.java
@@ -21,12 +21,16 @@ package org.sonar.core.computation.db;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Objects;
+import com.google.common.base.Strings;
+import org.sonar.core.component.AuthorizedComponentDto;
+import org.sonar.core.component.ComponentDto;
import org.sonar.core.persistence.Dto;
import javax.annotation.Nullable;
import java.util.Date;
+import static com.google.common.base.Preconditions.checkNotNull;
import static org.sonar.core.computation.db.AnalysisReportDto.Status.FAILED;
import static org.sonar.core.computation.db.AnalysisReportDto.Status.SUCCESS;
@@ -34,12 +38,12 @@ public class AnalysisReportDto extends Dto<String> {
private Long id;
private String projectKey;
- private String projectName;
private Status status;
private String data;
private Long snapshotId;
private Date startedAt;
private Date finishedAt;
+ private ComponentDto project;
public AnalysisReportDto() {
super();
@@ -102,7 +106,6 @@ public class AnalysisReportDto extends Dto<String> {
return Objects.toStringHelper(this)
.add("id", getId())
.add("projectKey", getProjectKey())
- .add("projectName", getProjectName())
.add("status", getStatus())
.add("createdAt", getCreatedAt())
.add("startedAt", getStartedAt())
@@ -111,12 +114,11 @@ public class AnalysisReportDto extends Dto<String> {
}
public String getProjectName() {
- return projectName;
- }
+ if (project == null) {
+ return getProjectKey();
+ }
- public AnalysisReportDto setProjectName(String projectName) {
- this.projectName = projectName;
- return this;
+ return Strings.nullToEmpty(project.name());
}
public Long getSnapshotId() {
@@ -158,6 +160,15 @@ public class AnalysisReportDto extends Dto<String> {
return this;
}
+ public AuthorizedComponentDto getProject() {
+ return checkNotNull(project);
+ }
+
+ public AnalysisReportDto setProject(ComponentDto project) {
+ this.project = project;
+ return this;
+ }
+
public enum Status {
PENDING, WORKING, SUCCESS, FAILED;
diff --git a/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/DbCleanerConstants.java b/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/DbCleanerConstants.java
new file mode 100644
index 00000000000..a577f632608
--- /dev/null
+++ b/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/DbCleanerConstants.java
@@ -0,0 +1,34 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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.core.computation.dbcleaner;
+
+public interface DbCleanerConstants {
+
+ String PLUGIN_KEY = "dbcleaner";
+ String PLUGIN_NAME = "DbCleaner";
+ String PROPERTY_CLEAN_DIRECTORY = "sonar.dbcleaner.cleanDirectory";
+
+ String HOURS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_DAY = "sonar.dbcleaner.hoursBeforeKeepingOnlyOneSnapshotByDay";
+ String WEEKS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_WEEK = "sonar.dbcleaner.weeksBeforeKeepingOnlyOneSnapshotByWeek";
+ String WEEKS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_MONTH = "sonar.dbcleaner.weeksBeforeKeepingOnlyOneSnapshotByMonth";
+ String WEEKS_BEFORE_DELETING_ALL_SNAPSHOTS = "sonar.dbcleaner.weeksBeforeDeletingAllSnapshots";
+ String DAYS_BEFORE_DELETING_CLOSED_ISSUES = "sonar.dbcleaner.daysBeforeDeletingClosedIssues";
+}
diff --git a/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/DbCleanerProperties.java b/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/DbCleanerProperties.java
new file mode 100644
index 00000000000..744a8873657
--- /dev/null
+++ b/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/DbCleanerProperties.java
@@ -0,0 +1,105 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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.core.computation.dbcleaner;
+
+import org.sonar.api.CoreProperties;
+import org.sonar.api.PropertyType;
+import org.sonar.api.config.PropertyDefinition;
+import org.sonar.api.resources.Qualifiers;
+
+import java.util.Arrays;
+import java.util.List;
+
+public final class DbCleanerProperties {
+
+ public static List<PropertyDefinition> all() {
+ return Arrays.asList(
+ PropertyDefinition.builder(DbCleanerConstants.PROPERTY_CLEAN_DIRECTORY)
+ .defaultValue("true")
+ .name("Clean directory/package history")
+ .description("If set to true, no history is kept at directory/package level. Setting this to false can cause database bloat.")
+ .type(PropertyType.BOOLEAN)
+ .onQualifiers(Qualifiers.PROJECT)
+ .category(CoreProperties.CATEGORY_GENERAL)
+ .subCategory(CoreProperties.SUBCATEGORY_DATABASE_CLEANER)
+ .index(1)
+ .build(),
+
+ PropertyDefinition.builder(DbCleanerConstants.DAYS_BEFORE_DELETING_CLOSED_ISSUES)
+ .defaultValue("30")
+ .name("Delete closed issues after")
+ .description("Issues that have been closed for more than this number of days will be deleted.")
+ .type(PropertyType.INTEGER)
+ .onQualifiers(Qualifiers.PROJECT)
+ .category(CoreProperties.CATEGORY_GENERAL)
+ .subCategory(CoreProperties.SUBCATEGORY_DATABASE_CLEANER)
+ .index(2)
+ .build(),
+
+ PropertyDefinition.builder(DbCleanerConstants.HOURS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_DAY)
+ .defaultValue("24")
+ .name("Keep only one snapshot a day after")
+ .description("After this number of hours, if there are several snapshots during the same day, "
+ + "the DbCleaner keeps the most recent one and fully deletes the other ones.")
+ .type(PropertyType.INTEGER)
+ .onQualifiers(Qualifiers.PROJECT)
+ .category(CoreProperties.CATEGORY_GENERAL)
+ .subCategory(CoreProperties.SUBCATEGORY_DATABASE_CLEANER)
+ .index(3)
+ .build(),
+
+ PropertyDefinition.builder(DbCleanerConstants.WEEKS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_WEEK)
+ .defaultValue("4")
+ .name("Keep only one snapshot a week after")
+ .description("After this number of weeks, if there are several snapshots during the same week, "
+ + "the DbCleaner keeps the most recent one and fully deletes the other ones")
+ .type(PropertyType.INTEGER)
+ .onQualifiers(Qualifiers.PROJECT)
+ .category(CoreProperties.CATEGORY_GENERAL)
+ .subCategory(CoreProperties.SUBCATEGORY_DATABASE_CLEANER)
+ .index(4)
+ .build(),
+
+ PropertyDefinition.builder(DbCleanerConstants.WEEKS_BEFORE_KEEPING_ONLY_ONE_SNAPSHOT_BY_MONTH)
+ .defaultValue("52")
+ .name("Keep only one snapshot a month after")
+ .description("After this number of weeks, if there are several snapshots during the same month, "
+ + "the DbCleaner keeps the most recent one and fully deletes the other ones.")
+ .type(PropertyType.INTEGER)
+ .onQualifiers(Qualifiers.PROJECT)
+ .category(CoreProperties.CATEGORY_GENERAL)
+ .subCategory(CoreProperties.SUBCATEGORY_DATABASE_CLEANER)
+ .index(5)
+ .build(),
+
+ PropertyDefinition.builder(DbCleanerConstants.WEEKS_BEFORE_DELETING_ALL_SNAPSHOTS)
+ .defaultValue("260")
+ .name("Delete all snapshots after")
+ .description("After this number of weeks, all snapshots are fully deleted.")
+ .type(PropertyType.INTEGER)
+ .onQualifiers(Qualifiers.PROJECT)
+ .category(CoreProperties.CATEGORY_GENERAL)
+ .subCategory(CoreProperties.SUBCATEGORY_DATABASE_CLEANER)
+ .index(6)
+ .build()
+ );
+ }
+}
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DefaultPurgeTask.java b/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/DefaultPurgeTask.java
index 5636515cb3e..4cd7799c297 100644
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DefaultPurgeTask.java
+++ b/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/DefaultPurgeTask.java
@@ -17,7 +17,8 @@
* 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.plugins.dbcleaner;
+
+package org.sonar.core.computation.dbcleaner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -25,17 +26,15 @@ import org.sonar.api.CoreProperties;
import org.sonar.api.config.Settings;
import org.sonar.api.resources.Scopes;
import org.sonar.api.utils.TimeUtils;
+import org.sonar.core.computation.dbcleaner.period.DefaultPeriodCleaner;
import org.sonar.core.purge.PurgeConfiguration;
import org.sonar.core.purge.PurgeDao;
import org.sonar.core.purge.PurgeProfiler;
-import org.sonar.plugins.dbcleaner.api.DbCleanerConstants;
-import org.sonar.plugins.dbcleaner.api.PurgeTask;
-import org.sonar.plugins.dbcleaner.period.DefaultPeriodCleaner;
/**
* @since 2.14
*/
-public class DefaultPurgeTask implements PurgeTask {
+public class DefaultPurgeTask {
private static final Logger LOG = LoggerFactory.getLogger(DefaultPurgeTask.class);
private PurgeDao purgeDao;
@@ -50,14 +49,12 @@ public class DefaultPurgeTask implements PurgeTask {
this.profiler = profiler;
}
- @Override
- public PurgeTask delete(long resourceId) {
+ public DefaultPurgeTask delete(long resourceId) {
purgeDao.deleteResourceTree(resourceId);
return this;
}
- @Override
- public PurgeTask purge(long resourceId) {
+ public DefaultPurgeTask purge(long resourceId) {
long start = System.currentTimeMillis();
profiler.reset();
cleanHistoricalData(resourceId);
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/DefaultPeriodCleaner.java b/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/period/DefaultPeriodCleaner.java
index ade98c3dbaf..76b1238dc07 100644
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/DefaultPeriodCleaner.java
+++ b/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/period/DefaultPeriodCleaner.java
@@ -17,7 +17,8 @@
* 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.plugins.dbcleaner.period;
+
+package org.sonar.core.computation.dbcleaner.period;
import com.google.common.annotations.VisibleForTesting;
import org.slf4j.Logger;
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/DeleteAllFilter.java b/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/period/DeleteAllFilter.java
index 18a795e1ee7..25dcb409ea1 100644
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/DeleteAllFilter.java
+++ b/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/period/DeleteAllFilter.java
@@ -17,7 +17,8 @@
* 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.plugins.dbcleaner.period;
+
+package org.sonar.core.computation.dbcleaner.period;
import com.google.common.collect.Lists;
import org.slf4j.LoggerFactory;
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Filter.java b/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/period/Filter.java
index 4d4419be8c4..ef4a3753242 100644
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Filter.java
+++ b/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/period/Filter.java
@@ -17,7 +17,8 @@
* 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.plugins.dbcleaner.period;
+
+package org.sonar.core.computation.dbcleaner.period;
import org.sonar.core.purge.PurgeableSnapshotDto;
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Filters.java b/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/period/Filters.java
index c291cd8fec4..8e59596212c 100644
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Filters.java
+++ b/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/period/Filters.java
@@ -17,12 +17,13 @@
* 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.plugins.dbcleaner.period;
+
+package org.sonar.core.computation.dbcleaner.period;
import com.google.common.collect.Lists;
import org.apache.commons.lang.time.DateUtils;
import org.sonar.api.config.Settings;
-import org.sonar.plugins.dbcleaner.api.DbCleanerConstants;
+import org.sonar.core.computation.dbcleaner.DbCleanerConstants;
import java.util.Calendar;
import java.util.Date;
@@ -43,10 +44,6 @@ class Filters {
all.add(new DeleteAllFilter(dateToStartDeletingAllSnapshots));
}
- List<Filter> all() {
- return all;
- }
-
static Date getDateFromWeeks(Settings settings, String propertyKey) {
int weeks = settings.getInt(propertyKey);
return DateUtils.addWeeks(new Date(), -weeks);
@@ -56,4 +53,8 @@ class Filters {
int hours = settings.getInt(propertyKey);
return DateUtils.addHours(new Date(), -hours);
}
+
+ List<Filter> all() {
+ return all;
+ }
}
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Interval.java b/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/period/Interval.java
index 18b02c38d08..5676a858495 100644
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Interval.java
+++ b/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/period/Interval.java
@@ -17,7 +17,8 @@
* 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.plugins.dbcleaner.period;
+
+package org.sonar.core.computation.dbcleaner.period;
import com.google.common.collect.Lists;
import org.apache.commons.lang.time.DateUtils;
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/KeepOneFilter.java b/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/period/KeepOneFilter.java
index 81249fdd929..419add8383f 100644
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/KeepOneFilter.java
+++ b/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/period/KeepOneFilter.java
@@ -17,7 +17,8 @@
* 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.plugins.dbcleaner.period;
+
+package org.sonar.core.computation.dbcleaner.period;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Lists;
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/package-info.java b/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/period/package-info.java
index f5b97cfc92b..283ef7fa912 100644
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/package-info.java
+++ b/sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/period/package-info.java
@@ -19,7 +19,6 @@
*/
@ParametersAreNonnullByDefault
-package org.sonar.plugins.dbcleaner.period;
+package org.sonar.core.computation.dbcleaner.period;
import javax.annotation.ParametersAreNonnullByDefault;
-
diff --git a/sonar-core/src/main/java/org/sonar/core/config/CorePropertyDefinitions.java b/sonar-core/src/main/java/org/sonar/core/config/CorePropertyDefinitions.java
index d98fddab931..b678394d38a 100644
--- a/sonar-core/src/main/java/org/sonar/core/config/CorePropertyDefinitions.java
+++ b/sonar-core/src/main/java/org/sonar/core/config/CorePropertyDefinitions.java
@@ -24,6 +24,7 @@ import com.google.common.collect.Lists;
import org.sonar.api.CoreProperties;
import org.sonar.api.config.PropertyDefinition;
import org.sonar.api.resources.Qualifiers;
+import org.sonar.core.computation.dbcleaner.DbCleanerProperties;
import java.util.List;
@@ -39,6 +40,7 @@ public class CorePropertyDefinitions {
defs.addAll(ExclusionProperties.all());
defs.addAll(SecurityProperties.all());
defs.addAll(DebtProperties.all());
+ defs.addAll(DbCleanerProperties.all());
defs.addAll(ImmutableList.of(
// BATCH
@@ -101,7 +103,7 @@ public class CorePropertyDefinitions {
.category(CoreProperties.CATEGORY_GENERAL)
.subCategory(CoreProperties.SUBCATEGORY_DIFFERENTIAL_VIEWS)
.build()
- ));
+ ));
return defs;
}
}
diff --git a/sonar-core/src/main/resources/org/sonar/core/computation/db/AnalysisReportMapper.xml b/sonar-core/src/main/resources/org/sonar/core/computation/db/AnalysisReportMapper.xml
index e2166b7b36f..16613e4a946 100644
--- a/sonar-core/src/main/resources/org/sonar/core/computation/db/AnalysisReportMapper.xml
+++ b/sonar-core/src/main/resources/org/sonar/core/computation/db/AnalysisReportMapper.xml
@@ -6,7 +6,6 @@
<!-- the data report is not brought back by default as it could be too big in memory -->
ar.id,
ar.project_key as projectKey,
- ar.project_name as projectName,
ar.report_status as status,
ar.snapshot_id as snapshotId,
ar.created_at as createdAt,
@@ -17,9 +16,9 @@
<insert id="insert" parameterType="AnalysisReport" useGeneratedKeys="true">
insert into analysis_reports
- (project_key, project_name, snapshot_id, report_status, report_data, created_at, updated_at, started_at,
+ (project_key, snapshot_id, report_status, report_data, created_at, updated_at, started_at,
finished_at)
- values (#{projectKey}, #{projectName}, #{snapshotId}, #{status}, #{data}, #{createdAt}, #{updatedAt}, #{startedAt},
+ values (#{projectKey}, #{snapshotId}, #{status}, #{data}, #{createdAt}, #{updatedAt}, #{startedAt},
#{finishedAt})
</insert>
diff --git a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DbCleanerPluginTest.java b/sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/DbCleanerPropertiesTest.java
index da6ddc93bcd..4c4311aac3b 100644
--- a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DbCleanerPluginTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/DbCleanerPropertiesTest.java
@@ -17,16 +17,17 @@
* 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.plugins.dbcleaner;
+
+package org.sonar.core.computation.dbcleaner;
import org.junit.Test;
import static org.fest.assertions.Assertions.assertThat;
-public class DbCleanerPluginTest {
+public class DbCleanerPropertiesTest {
@Test
public void shouldGetExtensions() {
- assertThat(new DbCleanerPlugin().getExtensions()).hasSize(9);
+ assertThat(new DbCleanerProperties().all()).hasSize(6);
}
}
diff --git a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DbCleanerTestUtils.java b/sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/DbCleanerTestUtils.java
index 944c34b3e95..392e58c0f0b 100644
--- a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DbCleanerTestUtils.java
+++ b/sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/DbCleanerTestUtils.java
@@ -17,7 +17,8 @@
* 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.plugins.dbcleaner;
+
+package org.sonar.core.computation.dbcleaner;
import org.sonar.api.utils.DateUtils;
import org.sonar.core.purge.PurgeableSnapshotDto;
diff --git a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DefaultPurgeTaskTest.java b/sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/DefaultPurgeTaskTest.java
index 7d6e48bbcce..72359ee3dee 100644
--- a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/DefaultPurgeTaskTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/DefaultPurgeTaskTest.java
@@ -17,7 +17,8 @@
* 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.plugins.dbcleaner;
+
+package org.sonar.core.computation.dbcleaner;
import ch.qos.logback.classic.Logger;
import org.junit.Test;
@@ -26,25 +27,22 @@ import org.sonar.api.CoreProperties;
import org.sonar.api.config.PropertyDefinitions;
import org.sonar.api.config.Settings;
import org.sonar.api.resources.Scopes;
+import org.sonar.core.computation.dbcleaner.period.DefaultPeriodCleaner;
import org.sonar.core.purge.PurgeConfiguration;
import org.sonar.core.purge.PurgeDao;
import org.sonar.core.purge.PurgeProfiler;
-import org.sonar.plugins.dbcleaner.api.DbCleanerConstants;
-import org.sonar.plugins.dbcleaner.period.DefaultPeriodCleaner;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.argThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.*;
public class DefaultPurgeTaskTest {
+
@Test
public void shouldNotDeleteHistoricalDataOfDirectories() {
PurgeDao purgeDao = mock(PurgeDao.class);
- Settings settings = new Settings(new PropertyDefinitions(DbCleanerPlugin.propertyDefinitions()));
+ Settings settings = new Settings(new PropertyDefinitions(DbCleanerProperties.all()));
settings.setProperty(DbCleanerConstants.PROPERTY_CLEAN_DIRECTORY, "false");
DefaultPurgeTask task = new DefaultPurgeTask(purgeDao, settings, mock(DefaultPeriodCleaner.class), mock(PurgeProfiler.class));
@@ -62,7 +60,7 @@ public class DefaultPurgeTaskTest {
@Test
public void shouldDeleteHistoricalDataOfDirectoriesByDefault() {
PurgeDao purgeDao = mock(PurgeDao.class);
- Settings settings = new Settings(new PropertyDefinitions(DbCleanerPlugin.propertyDefinitions()));
+ Settings settings = new Settings(new PropertyDefinitions(DbCleanerProperties.all()));
DefaultPurgeTask task = new DefaultPurgeTask(purgeDao, settings, mock(DefaultPeriodCleaner.class), mock(PurgeProfiler.class));
task.purge(1L);
@@ -95,7 +93,7 @@ public class DefaultPurgeTaskTest {
PurgeConfiguration conf = new PurgeConfiguration(1L, new String[0], 30);
PurgeDao purgeDao = mock(PurgeDao.class);
when(purgeDao.purge(conf)).thenThrow(new RuntimeException());
- Settings settings = new Settings(new PropertyDefinitions(DbCleanerPlugin.propertyDefinitions()));
+ Settings settings = new Settings(new PropertyDefinitions(DbCleanerProperties.all()));
settings.setProperty(CoreProperties.PROFILING_LOG_PROPERTY, true);
PurgeProfiler profiler = mock(PurgeProfiler.class);
@@ -104,4 +102,5 @@ public class DefaultPurgeTaskTest {
verify(profiler).dump(anyLong(), any(Logger.class));
}
+
}
diff --git a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/DefaultPeriodCleanerTest.java b/sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/period/DefaultPeriodCleanerTest.java
index c252c3bfb22..0a5872041d2 100644
--- a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/DefaultPeriodCleanerTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/period/DefaultPeriodCleanerTest.java
@@ -17,7 +17,8 @@
* 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.plugins.dbcleaner.period;
+
+package org.sonar.core.computation.dbcleaner.period;
import org.apache.commons.lang.ObjectUtils;
import org.hamcrest.BaseMatcher;
@@ -35,10 +36,7 @@ import java.util.Date;
import static org.mockito.Matchers.anyListOf;
import static org.mockito.Matchers.argThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.*;
public class DefaultPeriodCleanerTest {
diff --git a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/DeleteAllFilterTest.java b/sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/period/DeleteAllFilterTest.java
index 12967c16951..2a84512355e 100644
--- a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/DeleteAllFilterTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/period/DeleteAllFilterTest.java
@@ -17,12 +17,13 @@
* 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.plugins.dbcleaner.period;
+
+package org.sonar.core.computation.dbcleaner.period;
import org.junit.Test;
import org.sonar.api.utils.DateUtils;
+import org.sonar.core.computation.dbcleaner.DbCleanerTestUtils;
import org.sonar.core.purge.PurgeableSnapshotDto;
-import org.sonar.plugins.dbcleaner.DbCleanerTestUtils;
import java.util.Arrays;
import java.util.List;
diff --git a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/IntervalTest.java b/sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/period/IntervalTest.java
index 5a519f721f1..a9c5aecc698 100644
--- a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/IntervalTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/period/IntervalTest.java
@@ -17,7 +17,8 @@
* 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.plugins.dbcleaner.period;
+
+package org.sonar.core.computation.dbcleaner.period;
import org.junit.Test;
import org.sonar.api.utils.DateUtils;
@@ -30,10 +31,21 @@ import java.util.List;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
-import static org.sonar.plugins.dbcleaner.DbCleanerTestUtils.createSnapshotWithDate;
-import static org.sonar.plugins.dbcleaner.DbCleanerTestUtils.createSnapshotWithDateTime;
+import static org.sonar.core.computation.dbcleaner.DbCleanerTestUtils.createSnapshotWithDate;
+import static org.sonar.core.computation.dbcleaner.DbCleanerTestUtils.createSnapshotWithDateTime;
public class IntervalTest {
+ static int calendarField(Interval interval, int field) {
+ if (interval.count() == 0) {
+ return -1;
+ }
+
+ PurgeableSnapshotDto first = interval.get().iterator().next();
+ GregorianCalendar cal = new GregorianCalendar();
+ cal.setTime(first.getDate());
+ return cal.get(field);
+ }
+
@Test
public void shouldGroupByIntervals() {
List<PurgeableSnapshotDto> snapshots = Arrays.asList(
@@ -46,7 +58,7 @@ public class IntervalTest {
createSnapshotWithDate(5L, "2011-06-20"),
createSnapshotWithDate(6L, "2012-06-29") // out of scope
- );
+ );
List<Interval> intervals = Interval.group(snapshots, DateUtils.parseDate("2010-01-01"), DateUtils.parseDate("2011-12-31"), Calendar.MONTH);
assertThat(intervals.size(), is(3));
@@ -66,7 +78,7 @@ public class IntervalTest {
List<PurgeableSnapshotDto> snapshots = Arrays.asList(
createSnapshotWithDate(1L, "2010-04-03"),
createSnapshotWithDate(2L, "2011-04-13")
- );
+ );
List<Interval> intervals = Interval.group(snapshots, DateUtils.parseDate("2010-01-01"), DateUtils.parseDate("2011-12-31"), Calendar.MONTH);
assertThat(intervals.size(), is(2));
@@ -86,22 +98,11 @@ public class IntervalTest {
createSnapshotWithDateTime(1L, "2011-05-25T16:16:48+0100"),
createSnapshotWithDateTime(2L, "2012-01-26T16:16:48+0100"),
createSnapshotWithDateTime(3L, "2012-01-27T16:16:48+0100")
- );
+ );
List<Interval> intervals = Interval.group(snapshots, DateUtils.parseDate("2011-05-25"), DateUtils.parseDate("2012-01-26"), Calendar.MONTH);
assertThat(intervals.size(), is(1));
assertThat(intervals.get(0).count(), is(1));
assertThat(intervals.get(0).get().get(0).getSnapshotId(), is(2L));
}
-
- static int calendarField(Interval interval, int field) {
- if (interval.count() == 0) {
- return -1;
- }
-
- PurgeableSnapshotDto first = interval.get().iterator().next();
- GregorianCalendar cal = new GregorianCalendar();
- cal.setTime(first.getDate());
- return cal.get(field);
- }
}
diff --git a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/KeepOneFilterTest.java b/sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/period/KeepOneFilterTest.java
index 4a9ecd48ea8..8e855f987df 100644
--- a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/KeepOneFilterTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/computation/dbcleaner/period/KeepOneFilterTest.java
@@ -17,7 +17,8 @@
* 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.plugins.dbcleaner.period;
+
+package org.sonar.core.computation.dbcleaner.period;
import com.google.common.base.Function;
import com.google.common.collect.Iterables;
@@ -33,10 +34,19 @@ import java.util.List;
import static com.google.common.collect.Lists.newArrayList;
import static org.fest.assertions.Assertions.assertThat;
-import static org.sonar.plugins.dbcleaner.DbCleanerTestUtils.createSnapshotWithDate;
+import static org.sonar.core.computation.dbcleaner.DbCleanerTestUtils.createSnapshotWithDate;
public class KeepOneFilterTest {
+ private static List<Long> snapshotIds(List<PurgeableSnapshotDto> snapshotDtos) {
+ return newArrayList(Iterables.transform(snapshotDtos, new Function<PurgeableSnapshotDto, Long>() {
+ @Override
+ public Long apply(@Nullable PurgeableSnapshotDto input) {
+ return input != null ? input.getSnapshotId() : null;
+ }
+ }));
+ }
+
@Test
public void shouldOnlyOneSnapshotPerInterval() {
Filter filter = new KeepOneFilter(DateUtils.parseDate("2011-03-25"), DateUtils.parseDate("2011-08-25"), Calendar.MONTH, "month");
@@ -82,13 +92,4 @@ public class KeepOneFilterTest {
assertThat(KeepOneFilter.isDeletable(createSnapshotWithDate(1L, "2011-05-01").setHasEvents(true))).isFalse();
}
- private static List<Long> snapshotIds(List<PurgeableSnapshotDto> snapshotDtos){
- return newArrayList(Iterables.transform(snapshotDtos, new Function<PurgeableSnapshotDto, Long>() {
- @Override
- public Long apply(@Nullable PurgeableSnapshotDto input) {
- return input != null ? input.getSnapshotId() : null;
- }
- }));
- }
-
}