aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-db-dao
diff options
context:
space:
mode:
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>2018-02-09 11:57:49 +0100
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>2018-02-13 14:50:35 +0100
commitfc37d5310d47c9ac50cfec06227df91e69f712fe (patch)
treef722fc8fde9d98060389142b64110d189c0bfc42 /server/sonar-db-dao
parentfe5e696eeb8af5ca512b76a91db3c718068e3f6b (diff)
downloadsonarqube-fc37d5310d47c9ac50cfec06227df91e69f712fe.tar.gz
sonarqube-fc37d5310d47c9ac50cfec06227df91e69f712fe.zip
SONAR-10301 delete from CE_TASK_INPUT when deleting a project
Diffstat (limited to 'server/sonar-db-dao')
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeCommands.java8
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeMapper.java4
-rw-r--r--server/sonar-db-dao/src/main/resources/org/sonar/db/purge/PurgeMapper.xml12
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeDaoTest.java56
4 files changed, 80 insertions, 0 deletions
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeCommands.java b/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeCommands.java
index 4f3fc10738b..edbe6931d79 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeCommands.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeCommands.java
@@ -255,6 +255,10 @@ class PurgeCommands {
purgeMapper.deleteCeTaskCharacteristicsOfCeActivityByProjectUuid(rootUuid);
session.commit();
profiler.stop();
+ profiler.start("deleteCeActivity (ce_task_input)");
+ purgeMapper.deleteCeTaskInputOfCeActivityByProjectUuid(rootUuid);
+ session.commit();
+ profiler.stop();
profiler.start("deleteCeActivity (ce_activity)");
purgeMapper.deleteCeActivityByProjectUuid(rootUuid);
session.commit();
@@ -270,6 +274,10 @@ class PurgeCommands {
purgeMapper.deleteCeTaskCharacteristicsOfCeQueueByProjectUuid(rootUuid);
session.commit();
profiler.stop();
+ profiler.start("deleteCeQueue (ce_task_input)");
+ purgeMapper.deleteCeTaskInputOfCeQueueByProjectUuid(rootUuid);
+ session.commit();
+ profiler.stop();
profiler.start("deleteCeQueue (ce_queue)");
purgeMapper.deleteCeQueueByProjectUuid(rootUuid);
session.commit();
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeMapper.java
index 68416043417..2db61704c6d 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeMapper.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeMapper.java
@@ -92,6 +92,8 @@ public interface PurgeMapper {
void deleteCeTaskCharacteristicsOfCeActivityByProjectUuid(@Param("projectUuid") String projectUuid);
+ void deleteCeTaskInputOfCeActivityByProjectUuid(@Param("projectUuid") String projectUuid);
+
void deleteCeScannerContextOfCeActivityByProjectUuid(@Param("projectUuid") String projectUuid);
void deleteCeActivityByProjectUuid(@Param("projectUuid") String projectUuid);
@@ -100,6 +102,8 @@ public interface PurgeMapper {
void deleteCeTaskCharacteristicsOfCeQueueByProjectUuid(@Param("projectUuid") String projectUuid);
+ void deleteCeTaskInputOfCeQueueByProjectUuid(@Param("projectUuid") String projectUuid);
+
void deleteCeQueueByProjectUuid(@Param("projectUuid") String projectUuid);
void deleteWebhookDeliveriesByProjectUuid(@Param("projectUuid") String projectUuid);
diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/purge/PurgeMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/purge/PurgeMapper.xml
index eb599b6b61b..4f652c7cdc8 100644
--- a/server/sonar-db-dao/src/main/resources/org/sonar/db/purge/PurgeMapper.xml
+++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/purge/PurgeMapper.xml
@@ -324,6 +324,12 @@
task_uuid in (select uuid from ce_activity where component_uuid=#{projectUuid,jdbcType=VARCHAR})
</delete>
+ <delete id="deleteCeTaskInputOfCeActivityByProjectUuid">
+ delete from ce_task_input
+ where
+ task_uuid in (select uuid from ce_activity where component_uuid=#{projectUuid,jdbcType=VARCHAR})
+ </delete>
+
<delete id="deleteCeActivityByProjectUuid">
delete from ce_activity where component_uuid=#{projectUuid,jdbcType=VARCHAR}
</delete>
@@ -340,6 +346,12 @@
task_uuid in (select uuid from ce_queue where component_uuid=#{projectUuid,jdbcType=VARCHAR})
</delete>
+ <delete id="deleteCeTaskInputOfCeQueueByProjectUuid">
+ delete from ce_task_input
+ where
+ task_uuid in (select uuid from ce_queue where component_uuid=#{projectUuid,jdbcType=VARCHAR})
+ </delete>
+
<delete id="deleteCeQueueByProjectUuid">
delete from ce_queue where component_uuid=#{projectUuid,jdbcType=VARCHAR}
</delete>
diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeDaoTest.java
index 02d5b5cc797..93b97c13772 100644
--- a/server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeDaoTest.java
+++ b/server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeDaoTest.java
@@ -20,6 +20,7 @@
package org.sonar.db.purge;
import com.google.common.collect.ImmutableList;
+import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -226,6 +227,31 @@ public class PurgeDaoTest {
}
@Test
+ public void delete_row_in_ce_task_input_referring_to_a_row_in_ce_activity_when_deleting_project() {
+ ComponentDto projectToBeDeleted = ComponentTesting.newPrivateProjectDto(dbTester.getDefaultOrganization());
+ ComponentDto anotherLivingProject = ComponentTesting.newPrivateProjectDto(dbTester.getDefaultOrganization());
+ dbClient.componentDao().insert(dbSession, projectToBeDeleted, anotherLivingProject);
+
+ // Insert 2 rows in CE_ACTIVITY : one for the project that will be deleted, and one on another project
+ CeActivityDto toBeDeleted = insertCeActivity(projectToBeDeleted);
+ insertCeTaskInput(toBeDeleted.getUuid());
+ CeActivityDto toNotDelete = insertCeActivity(anotherLivingProject);
+ insertCeTaskInput(toNotDelete.getUuid());
+ insertCeTaskInput("non existing task");
+ dbSession.commit();
+
+ underTest.deleteProject(dbSession, projectToBeDeleted.uuid());
+ dbSession.commit();
+
+ assertThat(dbTester.select("select uuid as \"UUID\" from ce_activity"))
+ .extracting(row -> (String) row.get("UUID"))
+ .containsOnly(toNotDelete.getUuid());
+ assertThat(dbTester.select("select task_uuid as \"UUID\" from ce_task_input"))
+ .extracting(row -> (String) row.get("UUID"))
+ .containsOnly(toNotDelete.getUuid(), "non existing task");
+ }
+
+ @Test
public void delete_row_in_ce_scanner_context_referring_to_a_row_in_ce_activity_when_deleting_project() {
ComponentDto projectToBeDeleted = ComponentTesting.newPrivateProjectDto(dbTester.getDefaultOrganization());
ComponentDto anotherLivingProject = ComponentTesting.newPrivateProjectDto(dbTester.getDefaultOrganization());
@@ -295,6 +321,31 @@ public class PurgeDaoTest {
}
@Test
+ public void delete_row_in_ce_task_input_referring_to_a_row_in_ce_queue_when_deleting_project() {
+ ComponentDto projectToBeDeleted = ComponentTesting.newPrivateProjectDto(dbTester.getDefaultOrganization());
+ ComponentDto anotherLivingProject = ComponentTesting.newPrivateProjectDto(dbTester.getDefaultOrganization());
+ dbClient.componentDao().insert(dbSession, projectToBeDeleted, anotherLivingProject);
+
+ // Insert 2 rows in CE_ACTIVITY : one for the project that will be deleted, and one on another project
+ CeQueueDto toBeDeleted = insertCeQueue(projectToBeDeleted);
+ insertCeTaskInput(toBeDeleted.getUuid());
+ CeQueueDto toNotDelete = insertCeQueue(anotherLivingProject);
+ insertCeTaskInput(toNotDelete.getUuid());
+ insertCeTaskInput("non existing task");
+ dbSession.commit();
+
+ underTest.deleteProject(dbSession, projectToBeDeleted.uuid());
+ dbSession.commit();
+
+ assertThat(dbTester.select("select uuid as \"UUID\" from ce_queue"))
+ .extracting(row -> (String) row.get("UUID"))
+ .containsOnly(toNotDelete.getUuid());
+ assertThat(dbTester.select("select task_uuid as \"UUID\" from ce_task_input"))
+ .extracting(row -> (String) row.get("UUID"))
+ .containsOnly(toNotDelete.getUuid(), "non existing task");
+ }
+
+ @Test
public void delete_row_in_ce_scanner_context_referring_to_a_row_in_ce_queue_when_deleting_project() {
ComponentDto projectToBeDeleted = ComponentTesting.newPrivateProjectDto(dbTester.getDefaultOrganization());
ComponentDto anotherLivingProject = ComponentTesting.newPrivateProjectDto(dbTester.getDefaultOrganization());
@@ -776,6 +827,11 @@ public class PurgeDaoTest {
dbSession.commit();
}
+ private void insertCeTaskInput(String uuid) {
+ dbClient.ceTaskInputDao().insert(dbSession, uuid, new ByteArrayInputStream("some content man!".getBytes()));
+ dbSession.commit();
+ }
+
private static PurgeableAnalysisDto getById(List<PurgeableAnalysisDto> snapshots, String uuid) {
return snapshots.stream()
.filter(snapshot -> uuid.equals(snapshot.getAnalysisUuid()))