aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-db/src/main/java/org/sonar
diff options
context:
space:
mode:
Diffstat (limited to 'sonar-db/src/main/java/org/sonar')
-rw-r--r--sonar-db/src/main/java/org/sonar/db/purge/PurgeDao.java47
-rw-r--r--sonar-db/src/main/java/org/sonar/db/purge/PurgeListener.java9
-rw-r--r--sonar-db/src/main/java/org/sonar/db/purge/PurgeMapper.java6
3 files changed, 53 insertions, 9 deletions
diff --git a/sonar-db/src/main/java/org/sonar/db/purge/PurgeDao.java b/sonar-db/src/main/java/org/sonar/db/purge/PurgeDao.java
index fb8c66be654..53bd63175ef 100644
--- a/sonar-db/src/main/java/org/sonar/db/purge/PurgeDao.java
+++ b/sonar-db/src/main/java/org/sonar/db/purge/PurgeDao.java
@@ -19,12 +19,14 @@
*/
package org.sonar.db.purge;
+import com.google.common.base.Function;
import com.google.common.collect.Lists;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
+import javax.annotation.Nonnull;
import org.apache.commons.lang.ArrayUtils;
import org.apache.ibatis.session.ResultContext;
import org.apache.ibatis.session.ResultHandler;
@@ -39,7 +41,9 @@ import org.sonar.db.MyBatis;
import org.sonar.db.component.ResourceDao;
import org.sonar.db.component.ResourceDto;
+import static java.util.Collections.emptyList;
import static org.sonar.api.utils.DateUtils.dateToLong;
+import static org.sonar.db.DatabaseUtils.executeLargeInputs;
/**
* @since 2.14
@@ -81,13 +85,15 @@ public class PurgeDao implements Dao {
for (ResourceDto project : projects) {
disableOrphanResources(project, session, mapper, listener);
}
- deleteOldClosedIssues(conf, mapper);
+ deleteOldClosedIssues(conf, mapper, listener);
}
- private static void deleteOldClosedIssues(PurgeConfiguration conf, PurgeMapper mapper) {
+ private static void deleteOldClosedIssues(PurgeConfiguration conf, PurgeMapper mapper, PurgeListener listener) {
Date toDate = conf.maxLiveDateOfClosedIssues();
- mapper.deleteOldClosedIssueChanges(conf.rootProjectIdUuid().getUuid(), dateToLong(toDate));
- mapper.deleteOldClosedIssues(conf.rootProjectIdUuid().getUuid(), dateToLong(toDate));
+ List<String> issueKeys = mapper.selectOldClosedIssueKeys(conf.rootProjectIdUuid().getUuid(), dateToLong(toDate));
+ executeLargeInputs(issueKeys, new DeleteIssueChangesFromIssueKeys(mapper));
+ executeLargeInputs(issueKeys, new DeleteIssuesFromKeys(mapper));
+ listener.onIssuesRemoval(issueKeys);
}
private static void deleteAbortedBuilds(ResourceDto project, PurgeCommands commands) {
@@ -104,9 +110,8 @@ public class PurgeDao implements Dao {
PurgeSnapshotQuery.create()
.setResourceId(project.getId())
.setIslast(false)
- .setNotPurged(true)
- );
- for (final Long projectSnapshotId : projectSnapshotIds) {
+ .setNotPurged(true));
+ for (Long projectSnapshotId : projectSnapshotIds) {
LOG.debug("<- Clean snapshot " + projectSnapshotId);
if (!ArrayUtils.isEmpty(scopesWithoutHistoricalData)) {
PurgeSnapshotQuery query = PurgeSnapshotQuery.create()
@@ -209,4 +214,32 @@ public class PurgeDao implements Dao {
private static PurgeMapper mapper(DbSession session) {
return session.getMapper(PurgeMapper.class);
}
+
+ private static class DeleteIssueChangesFromIssueKeys implements Function<List<String>, List<Void>> {
+ private final PurgeMapper mapper;
+
+ private DeleteIssueChangesFromIssueKeys(PurgeMapper mapper) {
+ this.mapper = mapper;
+ }
+
+ @Override
+ public List<Void> apply(@Nonnull List<String> input) {
+ mapper.deleteIssueChangesFromIssueKeys(input);
+ return emptyList();
+ }
+ }
+
+ private static class DeleteIssuesFromKeys implements Function<List<String>, List<Void>> {
+ private final PurgeMapper mapper;
+
+ private DeleteIssuesFromKeys(PurgeMapper mapper) {
+ this.mapper = mapper;
+ }
+
+ @Override
+ public List<Void> apply(@Nonnull List<String> input) {
+ mapper.deleteIssuesFromKeys(input);
+ return emptyList();
+ }
+ }
}
diff --git a/sonar-db/src/main/java/org/sonar/db/purge/PurgeListener.java b/sonar-db/src/main/java/org/sonar/db/purge/PurgeListener.java
index 64e6c06f74b..a2224c2d715 100644
--- a/sonar-db/src/main/java/org/sonar/db/purge/PurgeListener.java
+++ b/sonar-db/src/main/java/org/sonar/db/purge/PurgeListener.java
@@ -19,6 +19,8 @@
*/
package org.sonar.db.purge;
+import java.util.List;
+
public interface PurgeListener {
PurgeListener EMPTY = new PurgeListener() {
@@ -26,7 +28,14 @@ public interface PurgeListener {
public void onComponentDisabling(String uuid) {
// do nothing
}
+
+ @Override
+ public void onIssuesRemoval(List<String> issueKeys) {
+ // do nothing
+ }
};
void onComponentDisabling(String uuid);
+
+ void onIssuesRemoval(List<String> issueKeys);
}
diff --git a/sonar-db/src/main/java/org/sonar/db/purge/PurgeMapper.java b/sonar-db/src/main/java/org/sonar/db/purge/PurgeMapper.java
index f8c3149c64a..d412f0ec6f8 100644
--- a/sonar-db/src/main/java/org/sonar/db/purge/PurgeMapper.java
+++ b/sonar-db/src/main/java/org/sonar/db/purge/PurgeMapper.java
@@ -82,9 +82,11 @@ public interface PurgeMapper {
void deleteComponentIssues(@Param("componentUuids") List<String> componentUuids);
- void deleteOldClosedIssueChanges(@Param("projectUuid") String projectUuid, @Nullable @Param("toDate") Long toDate);
+ List<String> selectOldClosedIssueKeys(@Param("projectUuid") String projectUuid, @Nullable @Param("toDate") Long toDate);
- void deleteOldClosedIssues(@Param("projectUuid") String projectUuid, @Nullable @Param("toDate") Long toDate);
+ void deleteIssuesFromKeys(@Param("keys") List<String> keys);
+
+ void deleteIssueChangesFromIssueKeys(@Param("issueKeys") List<String> issueKeys);
void deleteFileSourcesByProjectUuid(String rootProjectUuid);