From eda451a6d41f87329c0c18c7f933330581c5308b Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Thu, 11 Sep 2014 11:06:13 +0200 Subject: [PATCH] SONAR-5561 Only synchronize issue permission index since last indexation was done --- .../issue/db/IssueAuthorizationDao.java | 22 +++++++++++-------- .../issue/index/IssueAuthorizationDoc.java | 6 +++++ .../index/IssueAuthorizationNormalizer.java | 2 ++ .../persistence/ComponentDaoTest.java | 4 +++- .../issue/db/IssueAuthorizationDaoTest.java | 1 + .../IssueAuthorizationIndexMediumTest.java | 5 ++++- ....java => IndexSynchronizerMediumTest.java} | 4 ++-- .../ComponentDaoTest/insert-result.xml | 2 +- .../persistence/ComponentDaoTest/shared.xml | 2 +- .../sonar/core/component/ComponentDto.java | 15 +++++++++++++ .../core/component/db/ComponentMapper.xml | 7 +++--- .../issue/db/IssueAuthorizationMapper.xml | 6 ++++- .../core/component/ComponentDtoTest.java | 5 ++++- 13 files changed, 61 insertions(+), 20 deletions(-) rename server/sonar-server/src/test/java/org/sonar/server/search/{IndexSynchronizerTest.java => IndexSynchronizerMediumTest.java} (98%) diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/db/IssueAuthorizationDao.java b/server/sonar-server/src/main/java/org/sonar/server/issue/db/IssueAuthorizationDao.java index 39d4cb6280c..2a819600370 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/db/IssueAuthorizationDao.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/db/IssueAuthorizationDao.java @@ -66,15 +66,17 @@ public class IssueAuthorizationDao extends BaseDao row = (Map) context.getResultObject(); - String project = row.get("project"); - String user = row.get("user"); - String group = row.get("permission_group"); + Map row = (Map) context.getResultObject(); + String project = (String) row.get("project"); + String user = (String) row.get("user"); + String group = (String) row.get("permission_group"); + Date updatedAt = (Date) row.get("updated_at"); IssueAuthorizationDto issueAuthorizationDto = authorizationDtoMap.get(project); if (issueAuthorizationDto == null) { issueAuthorizationDto = new IssueAuthorizationDto() .setProject(project) .setPermission(UserRole.USER); + issueAuthorizationDto.setUpdatedAt(updatedAt); } if (group != null) { issueAuthorizationDto.addGroup(group); @@ -106,16 +108,18 @@ public class IssueAuthorizationDao extends BaseDao authorizationDtoMap = newHashMap(); - List> rows = session.selectList("org.sonar.core.issue.db.IssueAuthorizationMapper.selectAfterDate", params); - for (Map row : rows) { - String project = row.get("project"); - String user = row.get("user"); - String group = row.get("permission_group"); + List> rows = session.selectList("org.sonar.core.issue.db.IssueAuthorizationMapper.selectAfterDate", params); + for (Map row : rows) { + String project = (String) row.get("project"); + String user = (String) row.get("user"); + String group = (String) row.get("permission_group"); + Date updatedAt = (Date) row.get("updated_at"); IssueAuthorizationDto issueAuthorizationDto = authorizationDtoMap.get(project); if (issueAuthorizationDto == null) { issueAuthorizationDto = new IssueAuthorizationDto() .setProject(project) .setPermission(UserRole.USER); + issueAuthorizationDto.setUpdatedAt(updatedAt); } if (group != null) { issueAuthorizationDto.addGroup(group); diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueAuthorizationDoc.java b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueAuthorizationDoc.java index f0f9fd79973..ab5574d0c71 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueAuthorizationDoc.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueAuthorizationDoc.java @@ -21,7 +21,9 @@ package org.sonar.server.issue.index; import org.sonar.server.search.BaseDoc; +import org.sonar.server.search.IndexUtils; +import java.util.Date; import java.util.List; import java.util.Map; @@ -47,4 +49,8 @@ public class IssueAuthorizationDoc extends BaseDoc { return (List) getField(IssueAuthorizationNormalizer.IssueAuthorizationField.USERS.field()); } + public Date updatedAt() { + return IndexUtils.parseDateTime((String) getNullableField(IssueAuthorizationNormalizer.IssueAuthorizationField.UPDATED_AT.field())); + } + } diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueAuthorizationNormalizer.java b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueAuthorizationNormalizer.java index 001ad5f6d90..737f906cabd 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueAuthorizationNormalizer.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueAuthorizationNormalizer.java @@ -44,6 +44,7 @@ public class IssueAuthorizationNormalizer extends BaseNormalizer ALL_FIELDS = getAllFields(); @@ -79,6 +80,7 @@ public class IssueAuthorizationNormalizer extends BaseNormalizer upsert = getUpsertFor(IssueAuthorizationField.ALL_FIELDS, update); diff --git a/server/sonar-server/src/test/java/org/sonar/server/component/persistence/ComponentDaoTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/persistence/ComponentDaoTest.java index 5296d905c94..cbb7d8ece59 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/component/persistence/ComponentDaoTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/component/persistence/ComponentDaoTest.java @@ -91,6 +91,7 @@ public class ComponentDaoTest extends AbstractDaoTestCase { assertThat(result.language()).isNull(); assertThat(result.subProjectId()).isNull(); assertThat(result.projectId()).isEqualTo(1); + assertThat(result.getAuthorizationUpdatedAt()).isEqualTo(DateUtils.parseDate("2014-06-18")); } @Test @@ -245,7 +246,8 @@ public class ComponentDaoTest extends AbstractDaoTestCase { .setLanguage("java") .setPath("src/org/struts/RequestContext.java") .setSubProjectId(3L) - .setEnabled(true); + .setEnabled(true) + .setAuthorizationUpdatedAt(DateUtils.parseDate("2014-06-18")); dao.insert(session, componentDto); session.commit(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/db/IssueAuthorizationDaoTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/db/IssueAuthorizationDaoTest.java index ff7415bdc02..c8fe6f25142 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/db/IssueAuthorizationDaoTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/db/IssueAuthorizationDaoTest.java @@ -67,6 +67,7 @@ public class IssueAuthorizationDaoTest extends AbstractDaoTestCase { assertThat(dto.getPermission()).isEqualTo("user"); assertThat(dto.getGroups()).containsExactly("Anyone", "devs"); assertThat(dto.getUsers()).containsExactly("user1"); + assertThat(dto.getUpdatedAt()).isNotNull(); } @Test diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueAuthorizationIndexMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueAuthorizationIndexMediumTest.java index 14eaa3fc1ac..94ee04595c1 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueAuthorizationIndexMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueAuthorizationIndexMediumTest.java @@ -24,6 +24,7 @@ import org.junit.After; import org.junit.Before; import org.junit.ClassRule; import org.junit.Test; +import org.sonar.api.utils.DateUtils; import org.sonar.api.web.UserRole; import org.sonar.core.component.ComponentDto; import org.sonar.core.permission.PermissionFacade; @@ -66,7 +67,8 @@ public class IssueAuthorizationIndexMediumTest { public void synchronize() throws Exception { project = new ComponentDto() .setKey("Sample") - .setProjectId(1L); + .setProjectId(1L) + .setAuthorizationUpdatedAt(DateUtils.parseDate("2014-09-11")); db.componentDao().insert(session, project); GroupDto sonarUsers = new GroupDto().setName("devs"); @@ -91,6 +93,7 @@ public class IssueAuthorizationIndexMediumTest { assertThat(issueAuthorizationDoc.permission()).isEqualTo("user"); assertThat(issueAuthorizationDoc.groups()).containsExactly("devs"); assertThat(issueAuthorizationDoc.users()).containsExactly("john"); + assertThat(issueAuthorizationDoc.updatedAt()).isNotNull(); tester.clearIndexes(); tester.get(Platform.class).executeStartupTasks(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/search/IndexSynchronizerTest.java b/server/sonar-server/src/test/java/org/sonar/server/search/IndexSynchronizerMediumTest.java similarity index 98% rename from server/sonar-server/src/test/java/org/sonar/server/search/IndexSynchronizerTest.java rename to server/sonar-server/src/test/java/org/sonar/server/search/IndexSynchronizerMediumTest.java index 911d53a9ed8..dc45b658f59 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/search/IndexSynchronizerTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/search/IndexSynchronizerMediumTest.java @@ -33,7 +33,7 @@ import org.sonar.server.tester.ServerTester; import static org.fest.assertions.Assertions.assertThat; -public class IndexSynchronizerTest { +public class IndexSynchronizerMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); @@ -78,4 +78,4 @@ public class IndexSynchronizerTest { synchronizer.synchronize(dbSession, dbClient.ruleDao(), indexClient.get(RuleIndex.class)); assertThat(indexClient.get(RuleIndex.class).countAll()).isEqualTo(numberOfRules); } -} \ No newline at end of file +} diff --git a/server/sonar-server/src/test/resources/org/sonar/server/component/persistence/ComponentDaoTest/insert-result.xml b/server/sonar-server/src/test/resources/org/sonar/server/component/persistence/ComponentDaoTest/insert-result.xml index 397d2ae97fc..741a3eb7d84 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/component/persistence/ComponentDaoTest/insert-result.xml +++ b/server/sonar-server/src/test/resources/org/sonar/server/component/persistence/ComponentDaoTest/insert-result.xml @@ -3,7 +3,7 @@ diff --git a/server/sonar-server/src/test/resources/org/sonar/server/component/persistence/ComponentDaoTest/shared.xml b/server/sonar-server/src/test/resources/org/sonar/server/component/persistence/ComponentDaoTest/shared.xml index 0730d8ed1b3..77ef9f1bdbc 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/component/persistence/ComponentDaoTest/shared.xml +++ b/server/sonar-server/src/test/resources/org/sonar/server/component/persistence/ComponentDaoTest/shared.xml @@ -7,7 +7,7 @@ + enabled="[true]" language="[null]" copy_resource_id="[null]" person_id="[null]" path="[null]" authorization_updated_at="2014-06-18" /> @@ -102,12 +103,12 @@ - (kee, name, long_name, qualifier, scope, language, root_id, path, created_at) + (kee, name, long_name, qualifier, scope, language, root_id, path, created_at, authorization_updated_at) insert into projects - values (#{kee}, #{name}, #{longName}, #{qualifier}, #{scope}, #{language}, #{subProjectId}, #{path}, #{createdAt}) + values (#{kee}, #{name}, #{longName}, #{qualifier}, #{scope}, #{language}, #{subProjectId}, #{path}, #{createdAt}, #{authorizationUpdatedAt}) diff --git a/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueAuthorizationMapper.xml b/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueAuthorizationMapper.xml index 1b741c8f211..e516c13ec39 100644 --- a/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueAuthorizationMapper.xml +++ b/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueAuthorizationMapper.xml @@ -9,11 +9,13 @@ project_authorization.project as "project", project_authorization.login as "user", project_authorization.permission_group as "permission_group", - project_authorization.permission_role as "permission_role" + project_authorization.permission_role as "permission_role", + project_authorization.updated_at as "updated_at" FROM ( -- users SELECT projects.kee AS project, + projects.authorization_updated_at AS updated_at, users.login AS login, NULL AS permission_group, user_roles.role as permission_role @@ -26,6 +28,7 @@ -- groups without Anyone SELECT projects.kee AS project, + projects.authorization_updated_at AS updated_at, NULL AS login, groups.name AS permission_group, group_roles.role as permission_role @@ -39,6 +42,7 @@ -- Anyone groups SELECT projects.kee AS project, + projects.authorization_updated_at AS updated_at, NULL AS login, #{anyone} AS permission_group, group_roles.role as permission_role diff --git a/sonar-core/src/test/java/org/sonar/core/component/ComponentDtoTest.java b/sonar-core/src/test/java/org/sonar/core/component/ComponentDtoTest.java index b71779f0e06..7341139e2e1 100644 --- a/sonar-core/src/test/java/org/sonar/core/component/ComponentDtoTest.java +++ b/sonar-core/src/test/java/org/sonar/core/component/ComponentDtoTest.java @@ -21,6 +21,7 @@ package org.sonar.core.component; import org.junit.Test; +import org.sonar.api.utils.DateUtils; import static org.fest.assertions.Assertions.assertThat; @@ -38,7 +39,8 @@ public class ComponentDtoTest { .setLanguage("java") .setPath("src/org/struts/RequestContext.java") .setProjectId(2L) - .setSubProjectId(3L); + .setSubProjectId(3L) + .setAuthorizationUpdatedAt(DateUtils.parseDate("2014-09-11")); assertThat(componentDto.getId()).isEqualTo(1L); assertThat(componentDto.key()).isEqualTo("org.struts:struts-core:src/org/struts/RequestContext.java"); @@ -50,6 +52,7 @@ public class ComponentDtoTest { assertThat(componentDto.language()).isEqualTo("java"); assertThat(componentDto.projectId()).isEqualTo(2L); assertThat(componentDto.subProjectId()).isEqualTo(3L); + assertThat(componentDto.getAuthorizationUpdatedAt()).isEqualTo(DateUtils.parseDate("2014-09-11")); } @Test -- 2.39.5