diff options
author | Sébastien Lesaint <sebastien.lesaint@sonarsource.com> | 2018-02-09 11:57:49 +0100 |
---|---|---|
committer | Sébastien Lesaint <sebastien.lesaint@sonarsource.com> | 2018-02-13 14:50:35 +0100 |
commit | fc37d5310d47c9ac50cfec06227df91e69f712fe (patch) | |
tree | f722fc8fde9d98060389142b64110d189c0bfc42 /server/sonar-db-dao | |
parent | fe5e696eeb8af5ca512b76a91db3c718068e3f6b (diff) | |
download | sonarqube-fc37d5310d47c9ac50cfec06227df91e69f712fe.tar.gz sonarqube-fc37d5310d47c9ac50cfec06227df91e69f712fe.zip |
SONAR-10301 delete from CE_TASK_INPUT when deleting a project
Diffstat (limited to 'server/sonar-db-dao')
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())) |