From f92946e6b2662d0dd6a10dbe5ac1de2adacf57c4 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Fri, 12 Sep 2014 15:46:53 +0200 Subject: [PATCH] SONAR-5566 Use existing session for indexing issue permission --- .../java/org/sonar/server/db/BaseDao.java | 1 - .../permission/InternalPermissionService.java | 22 +++++++------------ .../IssueAuthorizationIndexMediumTest.java | 2 ++ .../ActiveRuleBackendMediumTest.java | 4 ++-- .../search/IndexSynchronizerMediumTest.java | 2 +- 5 files changed, 13 insertions(+), 18 deletions(-) diff --git a/server/sonar-server/src/main/java/org/sonar/server/db/BaseDao.java b/server/sonar-server/src/main/java/org/sonar/server/db/BaseDao.java index 319fa934581..bb42fa775c1 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/db/BaseDao.java +++ b/server/sonar-server/src/main/java/org/sonar/server/db/BaseDao.java @@ -345,7 +345,6 @@ public abstract class BaseDao, KEY extends Serializ } catch (Exception e) { throw new IllegalStateException(e); } - session.commit(); } private String getSynchronizeStatementFQN() { diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/InternalPermissionService.java b/server/sonar-server/src/main/java/org/sonar/server/permission/InternalPermissionService.java index 8a50c76ff84..012a77cb269 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/InternalPermissionService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/InternalPermissionService.java @@ -117,11 +117,11 @@ public class InternalPermissionService implements ServerComponent { } permissionFacade.grantDefaultRoles(session, component.getId(), component.qualifier()); + synchronizePermissions(session, componentKey); session.commit(); } finally { session.close(); } - synchronizePermissions(componentKey); } public void applyPermissionTemplate(Map params) { @@ -145,7 +145,7 @@ public class InternalPermissionService implements ServerComponent { for (String componentKey : query.getSelectedComponents()) { AuthorizedComponentDto component = dbClient.componentDao().getAuthorizedComponentByKey(componentKey, session); permissionFacade.applyPermissionTemplate(session, query.getTemplateKey(), component.getId()); - synchronizePermissions(componentKey); + synchronizePermissions(session, componentKey); } session.commit(); } finally { @@ -170,15 +170,16 @@ public class InternalPermissionService implements ServerComponent { changed = applyGroupPermissionChange(session, operation, permissionChangeQuery); } if (changed) { + String project = permissionChangeQuery.component(); + if (project != null) { + synchronizePermissions(session, project); + } session.commit(); } } finally { session.close(); } - String project = permissionChangeQuery.component(); - if (changed && project != null) { - synchronizePermissions(project); - } + } private boolean applyGroupPermissionChange(DbSession session, String operation, PermissionChangeQuery permissionChangeQuery) { @@ -270,16 +271,9 @@ public class InternalPermissionService implements ServerComponent { } } - private void synchronizePermissions(String projectKey) { - // The synchronisation cannot use an existing session, otherwise it's failing with the error : - // org.apache.ibatis.executor.ExecutorException: Executor was closed - DbSession session = dbClient.openSession(false); - try { + private void synchronizePermissions(DbSession session, String projectKey) { dbClient.issueAuthorizationDao().synchronizeAfter(session, index.get(IssueAuthorizationIndex.class).getLastSynchronization(), ImmutableMap.of(IssueAuthorizationDao.PROJECT_KEY, projectKey)); - } finally { - session.close(); - } } } 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 3dac0d16095..6d3ca263618 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 @@ -84,6 +84,7 @@ public class IssueAuthorizationIndexMediumTest { assertThat(index.getByKey(project.getKey())).isNull(); db.issueAuthorizationDao().synchronizeAfter(session, new Date(0)); + session.commit(); IssueAuthorizationDoc issueAuthorizationDoc = index.getByKey(project.getKey()); assertThat(issueAuthorizationDoc).isNotNull(); @@ -118,6 +119,7 @@ public class IssueAuthorizationIndexMediumTest { session.commit(); db.issueAuthorizationDao().synchronizeAfter(session, new Date(0)); + session.commit(); assertThat(index.getByKey(project.getKey())).isNotNull(); db.issueAuthorizationDao().deleteByKey(session, project.key()); diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ActiveRuleBackendMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ActiveRuleBackendMediumTest.java index db00b4efd32..a730ff72db1 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ActiveRuleBackendMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ActiveRuleBackendMediumTest.java @@ -62,20 +62,20 @@ public class ActiveRuleBackendMediumTest extends SearchMediumTest { db.activeRuleDao().insert(dbSession, activeRule); dbSession.commit(); - // 1. Synchronize since 0 tester.clearIndexes(); assertThat(index.get(ActiveRuleIndex.class).getByKey(activeRule.getKey())).isNull(); db.activeRuleDao().synchronizeAfter(dbSession, new Date(0L)); + dbSession.commit(); assertThat(index.get(ActiveRuleIndex.class).getByKey(activeRule.getKey())).isNotNull(); // 2. Synchronize since beginning tester.clearIndexes(); assertThat(index.get(ActiveRuleIndex.class).getByKey(activeRule.getKey())).isNull(); db.activeRuleDao().synchronizeAfter(dbSession, beginning); + dbSession.commit(); assertThat(index.get(ActiveRuleIndex.class).getByKey(activeRule.getKey())).isNotNull(); - // 3. Assert startup picks it up tester.clearIndexes(); Date before = index.get(ActiveRuleIndex.class).getLastSynchronization(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/search/IndexSynchronizerMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/search/IndexSynchronizerMediumTest.java index dc45b658f59..8048b57beca 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/search/IndexSynchronizerMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/search/IndexSynchronizerMediumTest.java @@ -63,7 +63,6 @@ public class IndexSynchronizerMediumTest { @Test public void can_synchronize() throws Exception { - int numberOfRules = 100; for (int i = 0; i < numberOfRules; i++) { @@ -76,6 +75,7 @@ public class IndexSynchronizerMediumTest { assertThat(indexClient.get(RuleIndex.class).countAll()).isEqualTo(0); synchronizer.synchronize(dbSession, dbClient.ruleDao(), indexClient.get(RuleIndex.class)); + dbSession.commit(); assertThat(indexClient.get(RuleIndex.class).countAll()).isEqualTo(numberOfRules); } } -- 2.39.5