aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2014-04-28 10:48:58 +0200
committerJulien Lancelot <julien.lancelot@sonarsource.com>2014-04-28 10:48:58 +0200
commitb70dfdca6c5c4dfd96869526a4efd1fd7f7eaab4 (patch)
tree0081930bb2bbecaad4c8806f829b51d298e28e0a
parent097437f96c9d57375e7537da53a5a95bc096655a (diff)
downloadsonarqube-b70dfdca6c5c4dfd96869526a4efd1fd7f7eaab4.tar.gz
sonarqube-b70dfdca6c5c4dfd96869526a4efd1fd7f7eaab4.zip
SONAR-4764 Fix issue on MySQL where profiles are empty because hibernate do not see new rules
-rw-r--r--sonar-server/src/main/java/org/sonar/server/startup/RegisterQualityProfiles.java45
-rw-r--r--sonar-server/src/test/java/org/sonar/server/startup/RegisterQualityProfilesTest.java8
2 files changed, 34 insertions, 19 deletions
diff --git a/sonar-server/src/main/java/org/sonar/server/startup/RegisterQualityProfiles.java b/sonar-server/src/main/java/org/sonar/server/startup/RegisterQualityProfiles.java
index 1b76f943c65..fb749814fa9 100644
--- a/sonar-server/src/main/java/org/sonar/server/startup/RegisterQualityProfiles.java
+++ b/sonar-server/src/main/java/org/sonar/server/startup/RegisterQualityProfiles.java
@@ -36,6 +36,7 @@ import org.sonar.api.utils.ValidationMessages;
import org.sonar.core.persistence.MyBatis;
import org.sonar.core.template.LoadedTemplateDao;
import org.sonar.core.template.LoadedTemplateDto;
+import org.sonar.jpa.session.DatabaseSessionFactory;
import org.sonar.server.platform.PersistentSettings;
import org.sonar.server.qualityprofile.*;
import org.sonar.server.rule.RegisterRules;
@@ -57,29 +58,33 @@ public class RegisterQualityProfiles {
private final ESActiveRule esActiveRule;
private final PersistentSettings settings;
private final List<ProfileDefinition> definitions;
+ private final DatabaseSessionFactory sessionFactory;
private final MyBatis myBatis;
- public RegisterQualityProfiles(MyBatis myBatis,
- PersistentSettings settings,
- ESActiveRule esActiveRule,
- LoadedTemplateDao loadedTemplateDao,
- QProfileBackup qProfileBackup,
- QProfileOperations qProfileOperations,
- QProfileLookup qProfileLookup,
- RegisterRules registerRulesBefore) {
- this(myBatis, settings, esActiveRule, loadedTemplateDao, qProfileBackup, qProfileOperations, qProfileLookup, registerRulesBefore,
+ public RegisterQualityProfiles(DatabaseSessionFactory sessionFactory,
+ MyBatis myBatis,
+ PersistentSettings settings,
+ ESActiveRule esActiveRule,
+ LoadedTemplateDao loadedTemplateDao,
+ QProfileBackup qProfileBackup,
+ QProfileOperations qProfileOperations,
+ QProfileLookup qProfileLookup,
+ RegisterRules registerRulesBefore) {
+ this(sessionFactory, myBatis, settings, esActiveRule, loadedTemplateDao, qProfileBackup, qProfileOperations, qProfileLookup, registerRulesBefore,
Collections.<ProfileDefinition>emptyList());
}
- public RegisterQualityProfiles(MyBatis myBatis,
- PersistentSettings settings,
- ESActiveRule esActiveRule,
- LoadedTemplateDao loadedTemplateDao,
- QProfileBackup qProfileBackup,
- QProfileOperations qProfileOperations,
- QProfileLookup qProfileLookup,
- RegisterRules registerRulesBefore,
- List<ProfileDefinition> definitions) {
+ public RegisterQualityProfiles(DatabaseSessionFactory sessionFactory,
+ MyBatis myBatis,
+ PersistentSettings settings,
+ ESActiveRule esActiveRule,
+ LoadedTemplateDao loadedTemplateDao,
+ QProfileBackup qProfileBackup,
+ QProfileOperations qProfileOperations,
+ QProfileLookup qProfileLookup,
+ RegisterRules registerRulesBefore,
+ List<ProfileDefinition> definitions) {
+ this.sessionFactory = sessionFactory;
this.myBatis = myBatis;
this.settings = settings;
this.esActiveRule = esActiveRule;
@@ -93,6 +98,10 @@ public class RegisterQualityProfiles {
public void start() {
TimeProfiler profiler = new TimeProfiler(LOGGER).start("Register Quality Profiles");
+ // Hibernate session can contain an invalid cache of rules.
+ // As long ProfileDefinition API will be used, then we'll have to use this commit as Hibernate is used by plugin to load rules when creating their profiles.
+ sessionFactory.getSession().commit();
+
SqlSession session = myBatis.openSession();
try {
ListMultimap<String, RulesProfile> profilesByLanguage = profilesByLanguage();
diff --git a/sonar-server/src/test/java/org/sonar/server/startup/RegisterQualityProfilesTest.java b/sonar-server/src/test/java/org/sonar/server/startup/RegisterQualityProfilesTest.java
index 41665aff4a0..17ce3f6faf2 100644
--- a/sonar-server/src/test/java/org/sonar/server/startup/RegisterQualityProfilesTest.java
+++ b/sonar-server/src/test/java/org/sonar/server/startup/RegisterQualityProfilesTest.java
@@ -27,6 +27,7 @@ import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
+import org.sonar.api.database.DatabaseSession;
import org.sonar.api.profiles.ProfileDefinition;
import org.sonar.api.profiles.RulesProfile;
import org.sonar.api.utils.SonarException;
@@ -35,6 +36,7 @@ import org.sonar.core.persistence.MyBatis;
import org.sonar.core.qualityprofile.db.QualityProfileDao;
import org.sonar.core.template.LoadedTemplateDao;
import org.sonar.core.template.LoadedTemplateDto;
+import org.sonar.jpa.session.DatabaseSessionFactory;
import org.sonar.server.platform.PersistentSettings;
import org.sonar.server.qualityprofile.*;
import org.sonar.server.user.UserSession;
@@ -76,6 +78,9 @@ public class RegisterQualityProfilesTest {
SqlSession session;
@Mock
+ DatabaseSessionFactory sessionFactory;
+
+ @Mock
PersistentSettings settings;
List<ProfileDefinition> definitions;
@@ -85,9 +90,10 @@ public class RegisterQualityProfilesTest {
@Before
public void setUp() throws Exception {
when(myBatis.openSession()).thenReturn(session);
+ when(sessionFactory.getSession()).thenReturn(mock(DatabaseSession.class));
definitions = newArrayList();
- registerQualityProfiles = new RegisterQualityProfiles(myBatis, settings, esActiveRule, loadedTemplateDao, qProfileBackup, qProfileOperations, qProfileLookup, null, definitions);
+ registerQualityProfiles = new RegisterQualityProfiles(sessionFactory, myBatis, settings, esActiveRule, loadedTemplateDao, qProfileBackup, qProfileOperations, qProfileLookup, null, definitions);
}
@Test