aboutsummaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorLukasz Jarocki <lukasz.jarocki@sonarsource.com>2021-08-16 11:56:30 +0200
committersonartech <sonartech@sonarsource.com>2021-08-19 20:08:14 +0000
commit77f7e7c54278a41000f2dad03c98992024324446 (patch)
tree0f3bdec5d42e24b2076b5ff8eaec09412fd1754e /server
parentcc54a4b5b1a1fd497b36455722927aee43dc58ae (diff)
downloadsonarqube-77f7e7c54278a41000f2dad03c98992024324446.tar.gz
sonarqube-77f7e7c54278a41000f2dad03c98992024324446.zip
SONAR-15277 removing duplicates from audit table when changing visibility of components
Diffstat (limited to 'server')
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistComponentsStep.java6
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/audit/AuditPersister.java4
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/component/ComponentDao.java7
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/project/ProjectDao.java3
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/component/ComponentDaoTest.java12
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/project/ProjectDaoTest.java22
-rw-r--r--server/sonar-webserver-webapi/src/main/java/org/sonar/server/project/ws/UpdateVisibilityAction.java4
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());