From acb655ff30cad999efcd21dafe556429bbb54d11 Mon Sep 17 00:00:00 2001 From: Sébastien Lesaint Date: Tue, 28 Jun 2016 17:51:53 +0200 Subject: SONAR-7705 take deleteAnalyses out of PurgeCommands.deleteComponents --- .../java/org/sonar/db/purge/PurgeCommands.java | 40 +++++++++++++++++++--- .../src/main/java/org/sonar/db/purge/PurgeDao.java | 1 + .../main/java/org/sonar/db/purge/PurgeMapper.java | 8 +++-- .../resources/org/sonar/db/purge/PurgeMapper.xml | 30 +++++++++------- .../java/org/sonar/db/purge/PurgeCommandsTest.java | 25 +++++++++++--- .../PurgeCommandsTest/shouldDeleteResource.xml | 20 +++++++++++ 6 files changed, 101 insertions(+), 23 deletions(-) (limited to 'sonar-db/src') diff --git a/sonar-db/src/main/java/org/sonar/db/purge/PurgeCommands.java b/sonar-db/src/main/java/org/sonar/db/purge/PurgeCommands.java index 222fe42cf70..27248d17ce9 100644 --- a/sonar-db/src/main/java/org/sonar/db/purge/PurgeCommands.java +++ b/sonar-db/src/main/java/org/sonar/db/purge/PurgeCommands.java @@ -54,6 +54,10 @@ class PurgeCommands { return purgeMapper.selectSnapshotIdsAndUuids(query).stream().map(IdUuidPair::getUuid).collect(Collectors.toList()); } + void deleteAnalyses(String rootUuid) { + deleteAnalyses(purgeMapper.selectSnapshotIdsAndUuids(PurgeSnapshotQuery.create().setComponentUuid(rootUuid))); + } + void deleteComponents(List componentIdUuids) { List> componentIdPartitions = Lists.partition(IdUuidPairs.ids(componentIdUuids), MAX_RESOURCES_PER_QUERY); List> componentUuidsPartitions = Lists.partition(IdUuidPairs.uuids(componentIdUuids), MAX_RESOURCES_PER_QUERY); @@ -61,10 +65,6 @@ class PurgeCommands { // voluntarily grouped by tables in order to benefit from JDBC batch mode. // Batch requests can only relate to the same PreparedStatement. - for (List componentUuidPartition : componentUuidsPartitions) { - deleteSnapshots(purgeMapper.selectSnapshotIdAndUuidsByComponent(componentUuidPartition)); - } - // possible missing optimization: filter requests according to resource scope profiler.start("deleteResourceLinks (project_links)"); @@ -181,6 +181,38 @@ class PurgeCommands { profiler.stop(); } + @VisibleForTesting + protected void deleteAnalyses(List analysisIdUuids) { + List> snapshotIdsPartition = Lists.partition(IdUuidPairs.ids(analysisIdUuids), MAX_SNAPSHOTS_PER_QUERY); + List> snapshotUuidsPartition = Lists.partition(IdUuidPairs.uuids(analysisIdUuids), MAX_SNAPSHOTS_PER_QUERY); + + deleteSnapshotDuplications(snapshotUuidsPartition); + + profiler.start("deleteAnalyses (events)"); + for (List partSnapshotUuids : snapshotUuidsPartition) { + purgeMapper.deleteSnapshotEvents(partSnapshotUuids); + } + session.commit(); + profiler.stop(); + + profiler.start("deleteAnalyses (project_measures)"); + for (List partSnapshotIds : snapshotIdsPartition) { + purgeMapper.deleteSnapshotMeasures(partSnapshotIds); + } + session.commit(); + profiler.stop(); + + profiler.start("deleteAnalyses (snapshots)"); + for (List partSnapshotUuids : snapshotUuidsPartition) { + purgeMapper.deleteAnalyses(partSnapshotUuids); + } + for (List snapshotIdPartition : snapshotIdsPartition) { + purgeMapper.deleteDescendantSnapshots(snapshotIdPartition); + } + session.commit(); + profiler.stop(); + } + void purgeSnapshots(PurgeSnapshotQuery... queries) { // use LinkedHashSet to keep order by remove duplicated ids LinkedHashSet snapshotIds = Sets.newLinkedHashSet(from(asList(queries)) 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 489017dd01a..286404d8909 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 @@ -151,6 +151,7 @@ public class PurgeDao implements Dao { private static void deleteProject(String rootUuid, PurgeMapper mapper, PurgeCommands commands) { List childrenIds = mapper.selectComponentsByProjectUuid(rootUuid); + commands.deleteAnalyses(rootUuid); commands.deleteComponents(childrenIds); commands.deleteFileSources(rootUuid); commands.deleteCeActivity(rootUuid); 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 2c2b5298739..a66f2d959f6 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 @@ -27,14 +27,16 @@ public interface PurgeMapper { List selectSnapshotIdsAndUuids(PurgeSnapshotQuery query); - List selectSnapshotIdAndUuidsByComponent(@Param("componentUuids") List componentUuids); - /** * Returns the list of components of a project from a project_uuid. The project itself is also returned. */ List selectComponentsByProjectUuid(String projectUuid); - void deleteSnapshot(@Param("snapshotIds") List snapshotIds); + void deleteAnalyses(@Param("analysisUuids") List analysisUuids); + + void deleteDescendantSnapshots(@Param("snapshotIds") List snapshotIds); + + void deleteSnapshot(@Param("snapshotUuids") List snapshotUuids); void deleteSnapshotDuplications(@Param("analysisUuids") List analysisUuids); diff --git a/sonar-db/src/main/resources/org/sonar/db/purge/PurgeMapper.xml b/sonar-db/src/main/resources/org/sonar/db/purge/PurgeMapper.xml index ecbbda75bbc..39914441ae8 100644 --- a/sonar-db/src/main/resources/org/sonar/db/purge/PurgeMapper.xml +++ b/sonar-db/src/main/resources/org/sonar/db/purge/PurgeMapper.xml @@ -46,18 +46,6 @@ - -