diff options
author | Lukasz Jarocki <lukasz.jarocki@sonarsource.com> | 2021-08-16 11:56:30 +0200 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2021-08-19 20:08:14 +0000 |
commit | 77f7e7c54278a41000f2dad03c98992024324446 (patch) | |
tree | 0f3bdec5d42e24b2076b5ff8eaec09412fd1754e /server | |
parent | cc54a4b5b1a1fd497b36455722927aee43dc58ae (diff) | |
download | sonarqube-77f7e7c54278a41000f2dad03c98992024324446.tar.gz sonarqube-77f7e7c54278a41000f2dad03c98992024324446.zip |
SONAR-15277 removing duplicates from audit table when changing visibility of components
Diffstat (limited to 'server')
7 files changed, 22 insertions, 36 deletions
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistComponentsStep.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistComponentsStep.java index af25cfd94c0..9bc638abd88 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistComponentsStep.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistComponentsStep.java @@ -108,7 +108,7 @@ public class PersistComponentsStep implements ComputationStep { .visit(treeRootHolder.getRoot()); disableRemainingComponents(dbSession, existingDtosByUuids.values()); - ensureConsistentVisibility(dbSession, projectUuid, isRootPrivate, treeRootHolder.getRoot().getType()); + ensureConsistentVisibility(dbSession, projectUuid, isRootPrivate, treeRootHolder.getRoot().getType(), treeRootHolder.getRoot().getName()); dbSession.commit(); } @@ -136,14 +136,14 @@ public class PersistComponentsStep implements ComputationStep { } private void ensureConsistentVisibility(DbSession dbSession, String projectUuid, boolean isRootPrivate, - Component.Type type) { + Component.Type type, String componentName) { String qualifier = null; if (type == Component.Type.PROJECT) { qualifier = PROJECT; } else if (type == Component.Type.VIEW) { qualifier = VIEW; } - dbClient.componentDao().setPrivateForRootComponentUuid(dbSession, projectUuid, isRootPrivate, qualifier); + dbClient.componentDao().setPrivateForRootComponentUuid(dbSession, projectUuid, isRootPrivate, qualifier, componentName); } private static boolean isRootPrivate(Component root, Map<String, ComponentDto> existingDtosByUuids) { diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/AuditPersister.java b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/AuditPersister.java index 3875dcbc61b..4a393c6ea76 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/audit/AuditPersister.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/audit/AuditPersister.java @@ -116,9 +116,7 @@ public interface AuditPersister { void updateComponent(DbSession dbSession, NewValue newValue, String qualifier); - void setPrivateForComponentUuid(DbSession session, NewValue componentNewValue, @Nullable String qualifier); - - void updateComponentVisibility(DbSession session, NewValue projectNewValue, String qualifier); + void updateComponentVisibility(DbSession session, NewValue componentNewValue, @Nullable String qualifier); void componentKeyUpdate(DbSession session, NewValue componentKeyNewValue, String qualifier); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/component/ComponentDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/component/ComponentDao.java index 33418b8aa86..5a7605eab04 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/component/ComponentDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/component/ComponentDao.java @@ -40,7 +40,6 @@ import org.sonar.db.DbSession; import org.sonar.db.RowNotFoundException; import org.sonar.db.audit.AuditPersister; import org.sonar.db.audit.model.ComponentNewValue; - import static com.google.common.base.Preconditions.checkArgument; import static java.util.Collections.emptyList; import static org.sonar.core.util.stream.MoreCollectors.toList; @@ -376,9 +375,11 @@ public class ComponentDao implements Dao { mapper(session).resetBChangedForRootComponentUuid(projectUuid); } - public void setPrivateForRootComponentUuid(DbSession session, String projectUuid, boolean isPrivate, @Nullable String qualifier) { + public void setPrivateForRootComponentUuid(DbSession session, String projectUuid, boolean isPrivate, + @Nullable String qualifier, String componentName) { if(auditPersister != null) { - auditPersister.setPrivateForComponentUuid(session, new ComponentNewValue(projectUuid, isPrivate, qualifier), qualifier); + ComponentNewValue componentNewValue = new ComponentNewValue(projectUuid, componentName, isPrivate, qualifier); + auditPersister.updateComponentVisibility(session, componentNewValue, qualifier); } mapper(session).setPrivateForRootComponentUuid(projectUuid, isPrivate); } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/project/ProjectDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/project/ProjectDao.java index 189d8348469..50ea889d17d 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/project/ProjectDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/project/ProjectDao.java @@ -104,9 +104,6 @@ public class ProjectDao implements Dao { } public void updateVisibility(DbSession session, String uuid, boolean isPrivate, String qualifier, String name) { - if (auditPersister != null) { - auditPersister.updateComponentVisibility(session, new ComponentNewValue(uuid, name, isPrivate, qualifier), qualifier); - } mapper(session).updateVisibility(uuid, isPrivate, system2.now()); } diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/component/ComponentDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/component/ComponentDaoTest.java index 7e4d2d2c5cd..be9a2c339f8 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/component/ComponentDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/component/ComponentDaoTest.java @@ -1771,7 +1771,7 @@ public class ComponentDaoTest { db.components().insertComponent(newPrivateProjectDto().setRootUuid(uuid1).setProjectUuid("foo").setPrivate(false)).uuid(), }; - underTest.setPrivateForRootComponentUuid(db.getSession(), uuid1, true, null); + underTest.setPrivateForRootComponentUuid(db.getSession(), uuid1, true, null, "name"); assertThat(privateFlagOfUuid(uuids[0])).isTrue(); assertThat(privateFlagOfUuid(uuids[1])).isTrue(); @@ -1779,7 +1779,7 @@ public class ComponentDaoTest { assertThat(privateFlagOfUuid(uuids[3])).isFalse(); assertThat(privateFlagOfUuid(uuids[4])).isFalse(); - underTest.setPrivateForRootComponentUuid(db.getSession(), uuid1, false, null); + underTest.setPrivateForRootComponentUuid(db.getSession(), uuid1, false, null, "name"); assertThat(privateFlagOfUuid(uuids[0])).isFalse(); assertThat(privateFlagOfUuid(uuids[1])).isFalse(); @@ -1787,7 +1787,7 @@ public class ComponentDaoTest { assertThat(privateFlagOfUuid(uuids[3])).isFalse(); assertThat(privateFlagOfUuid(uuids[4])).isFalse(); - underTest.setPrivateForRootComponentUuid(db.getSession(), uuid2, false, null); + underTest.setPrivateForRootComponentUuid(db.getSession(), uuid2, false, null, "name"); assertThat(privateFlagOfUuid(uuids[0])).isFalse(); assertThat(privateFlagOfUuid(uuids[1])).isFalse(); @@ -1795,7 +1795,7 @@ public class ComponentDaoTest { assertThat(privateFlagOfUuid(uuids[3])).isFalse(); assertThat(privateFlagOfUuid(uuids[4])).isFalse(); - underTest.setPrivateForRootComponentUuid(db.getSession(), uuid2, true, null); + underTest.setPrivateForRootComponentUuid(db.getSession(), uuid2, true, null, "name"); assertThat(privateFlagOfUuid(uuids[0])).isFalse(); assertThat(privateFlagOfUuid(uuids[1])).isFalse(); @@ -1883,10 +1883,10 @@ public class ComponentDaoTest { @Test public void setPrivateForRootComponentUuid_auditPersisterIsCalled() { - underTestWithAuditPersister.setPrivateForRootComponentUuid(dbSession, "anyUuid", false, APP); + underTestWithAuditPersister.setPrivateForRootComponentUuid(dbSession, "anyUuid", false, APP, "appName"); verify(auditPersister, Mockito.times(1)) - .setPrivateForComponentUuid(any(DbSession.class), any(ComponentNewValue.class), anyString()); + .updateComponentVisibility(any(DbSession.class), any(ComponentNewValue.class), anyString()); } @Test diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/project/ProjectDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/project/ProjectDaoTest.java index 4d12e9846fe..b42ba5d0083 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/project/ProjectDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/project/ProjectDaoTest.java @@ -19,13 +19,6 @@ */ package org.sonar.db.project; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Optional; -import javax.annotation.Nullable; - import org.junit.Rule; import org.junit.Test; import org.sonar.api.impl.utils.AlwaysIncreasingSystem2; @@ -42,6 +35,12 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; +import javax.annotation.Nullable; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Optional; public class ProjectDaoTest { @@ -207,15 +206,6 @@ public class ProjectDaoTest { } @Test - public void updateVisibility_shouldCallAuditPersister() { - ProjectDto dto1 = createProject("o1", "p1"); - - projectDaoWithAuditPersister.updateVisibility(db.getSession(), dto1.getUuid(), false, Qualifiers.PROJECT, dto1.getName()); - - verify(auditPersister, times(1)).updateComponentVisibility(any(), any(), eq(Qualifiers.PROJECT)); - } - - @Test public void update_shouldCallAuditPersister() { ProjectDto dto1 = createProject("o1", "p1"); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/project/ws/UpdateVisibilityAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/project/ws/UpdateVisibilityAction.java index bbb646ef2a7..0d8f6aa2640 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/project/ws/UpdateVisibilityAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/project/ws/UpdateVisibilityAction.java @@ -20,7 +20,6 @@ package org.sonar.server.project.ws; import com.google.common.collect.ImmutableSet; -import java.util.Set; import org.sonar.api.config.Configuration; import org.sonar.api.resources.Qualifiers; import org.sonar.api.server.ws.Request; @@ -54,6 +53,7 @@ import static org.sonar.server.user.AbstractUserSession.insufficientPrivilegesEx import static org.sonar.server.ws.KeyExamples.KEY_PROJECT_EXAMPLE_001; import static org.sonarqube.ws.client.project.ProjectsWsParameters.PARAM_PROJECT; import static org.sonarqube.ws.client.project.ProjectsWsParameters.PARAM_VISIBILITY; +import java.util.Set; public class UpdateVisibilityAction implements ProjectsWsAction { private static final Set<String> AUTHORIZED_QUALIFIERS = ImmutableSet.of(Qualifiers.PROJECT, Qualifiers.VIEW, Qualifiers.APP); @@ -132,7 +132,7 @@ public class UpdateVisibilityAction implements ProjectsWsAction { private void setPrivateForRootComponentUuid(DbSession dbSession, ComponentDto component, boolean isPrivate) { String uuid = component.uuid(); - dbClient.componentDao().setPrivateForRootComponentUuid(dbSession, uuid, isPrivate, component.qualifier()); + dbClient.componentDao().setPrivateForRootComponentUuid(dbSession, uuid, isPrivate, component.qualifier(), component.name()); if (component.qualifier().equals(Qualifiers.PROJECT) || component.qualifier().equals(Qualifiers.APP)) { dbClient.projectDao().updateVisibility(dbSession, uuid, isPrivate, component.qualifier(), component.name()); |