]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-10594 do not truncate rule repositories at startup
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Tue, 17 Apr 2018 18:10:20 +0000 (20:10 +0200)
committerSonarTech <sonartech@sonarsource.com>
Thu, 10 May 2018 18:20:52 +0000 (20:20 +0200)
server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleRepositoryDao.java
server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleRepositoryMapper.java
server/sonar-db-dao/src/main/resources/org/sonar/db/rule/RuleRepositoryMapper.xml
server/sonar-db-dao/src/test/java/org/sonar/db/rule/RuleRepositoryDaoTest.java
server/sonar-server/src/main/java/org/sonar/server/rule/RegisterRules.java
server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/CompareActionTest.java
server/sonar-server/src/test/java/org/sonar/server/rule/RegisterRulesTest.java
server/sonar-server/src/test/java/org/sonar/server/rule/ws/AppActionTest.java
server/sonar-server/src/test/java/org/sonar/server/rule/ws/RepositoriesActionTest.java

index 61b06e6ab3f28fadef457a776230bb972ddb36ee..c5bc57ba1bc4e58207c7954e1aea0a2d6d4e242e 100644 (file)
@@ -52,18 +52,6 @@ public class RuleRepositoryDao implements Dao {
     return dbSession.getMapper(RuleRepositoryMapper.class).selectByLanguage(language);
   }
 
-  public void truncate(DbSession dbSession) {
-    dbSession.getMapper(RuleRepositoryMapper.class).truncate();
-  }
-
-  public void insert(DbSession dbSession, Collection<RuleRepositoryDto> dtos) {
-    RuleRepositoryMapper mapper = dbSession.getMapper(RuleRepositoryMapper.class);
-    long now = system2.now();
-    for (RuleRepositoryDto dto : dtos) {
-      mapper.insert(dto, now);
-    }
-  }
-
   public void insertOrUpdate(DbSession dbSession, Collection<RuleRepositoryDto> dtos) {
     RuleRepositoryMapper mapper = dbSession.getMapper(RuleRepositoryMapper.class);
     long now = system2.now();
index a33adbcf3a0b69498e7cf52db435f54e9b12f0c3..4ead93da959e5dba2b3789922fb304911be6c2f5 100644 (file)
@@ -33,8 +33,6 @@ public interface RuleRepositoryMapper {
   @CheckForNull
   RuleRepositoryDto selectByKey(@Param("key") String key);
 
-  void truncate();
-
   void insert(@Param("repository") RuleRepositoryDto repository, @Param("now") long now);
 
   int update(@Param("repository") RuleRepositoryDto repository);
index d15ddce28dc243c687dcb1b7a41b9930edf07aee..b6e3321b95038c28aecb9162574ad809a66eea54 100644 (file)
     order by kee
   </select>
 
-  <update id="truncate">
-    delete from rule_repositories
-  </update>
-
   <insert id="insert" parameterType="map" useGeneratedKeys="false">
     insert into rule_repositories (kee, language, name, created_at)
     values (
index 8c711fa1a7a36054cbc3db663cd570e08ff644a3..4184d7f62465607172b1ec6f9d9fb435a66dc6a3 100644 (file)
@@ -122,40 +122,13 @@ public class RuleRepositoryDaoTest {
     underTest.deleteIfKeyNotIn(dbTester.getSession(), keys);
   }
 
-  @Test
-  public void test_insert_and_selectAll() {
-    DbSession dbSession = dbTester.getSession();
-    RuleRepositoryDto dto = new RuleRepositoryDto("findbugs", "java", "Findbugs");
-    underTest.insert(dbSession, asList(dto));
-
-    List<RuleRepositoryDto> rows = underTest.selectAll(dbSession);
-    assertThat(rows).hasSize(1);
-    RuleRepositoryDto row = rows.get(0);
-    assertThat(row.getKey()).isEqualTo("findbugs");
-    assertThat(row.getName()).isEqualTo("Findbugs");
-    assertThat(row.getLanguage()).isEqualTo("java");
-  }
-
-  @Test
-  public void insert_multiple_rows() {
-    DbSession dbSession = dbTester.getSession();
-    RuleRepositoryDto dto1 = new RuleRepositoryDto("findbugs", "java", "Findbugs");
-    RuleRepositoryDto dto2 = new RuleRepositoryDto("squid", "java", "Java");
-    RuleRepositoryDto dto3 = new RuleRepositoryDto("cobol-lint", "cobol", "Cobol Lint");
-    underTest.insert(dbSession, asList(dto1, dto2, dto3));
-
-    assertThat(underTest.selectAll(dbSession)).extracting(RuleRepositoryDto::getKey)
-      // ordered by key
-      .containsExactly("cobol-lint", "findbugs", "squid");
-  }
-
   @Test
   public void selectByLanguage() {
     DbSession dbSession = dbTester.getSession();
     RuleRepositoryDto dto1 = new RuleRepositoryDto("findbugs", "java", "Findbugs");
     RuleRepositoryDto dto2 = new RuleRepositoryDto("squid", "java", "Java");
     RuleRepositoryDto dto3 = new RuleRepositoryDto("cobol-lint", "cobol", "Cobol Lint");
-    underTest.insert(dbSession, asList(dto1, dto2, dto3));
+    underTest.insertOrUpdate(dbSession, asList(dto1, dto2, dto3));
 
     assertThat(underTest.selectByLanguage(dbSession, "java")).extracting(RuleRepositoryDto::getKey)
       // ordered by key
@@ -166,24 +139,11 @@ public class RuleRepositoryDaoTest {
   public void selectByLanguage_returns_empty_list_if_no_results() {
     DbSession dbSession = dbTester.getSession();
     RuleRepositoryDto dto1 = new RuleRepositoryDto("findbugs", "java", "Findbugs");
-    underTest.insert(dbSession, asList(dto1));
+    underTest.insertOrUpdate(dbSession, asList(dto1));
 
     assertThat(underTest.selectByLanguage(dbSession, "missing")).hasSize(0);
   }
 
-  @Test
-  public void truncate() {
-    DbSession dbSession = dbTester.getSession();
-    RuleRepositoryDto dto1 = new RuleRepositoryDto("findbugs", "java", "Findbugs");
-    RuleRepositoryDto dto2 = new RuleRepositoryDto("squid", "java", "Java");
-    underTest.insert(dbSession, asList(dto1, dto2));
-
-    underTest.truncate(dbSession);
-
-    assertThat(underTest.selectAll(dbSession)).isEmpty();
-  }
-
-
   private long selectCreatedAtByKey(DbSession dbSession, String key) {
     return (long) dbTester.selectFirst(dbSession, "select created_at as \"created_at\" from rule_repositories where kee='" + key + "'")
       .get("created_at");
index 9f9d1ce37640962580ae6063b4e446223b846d8c..ba7e348ea02087f11a1f3f3a30d7145a3b72b43e 100644 (file)
@@ -325,12 +325,13 @@ public class RegisterRules implements Startable {
   }
 
   private void persistRepositories(DbSession dbSession, List<RulesDefinition.Repository> repositories) {
-    dbClient.ruleRepositoryDao().truncate(dbSession);
     List<RuleRepositoryDto> dtos = repositories
       .stream()
       .map(r -> new RuleRepositoryDto(r.key(), r.language(), r.name()))
       .collect(toList(repositories.size()));
-    dbClient.ruleRepositoryDao().insert(dbSession, dtos);
+    List<String> keys = dtos.stream().map(RuleRepositoryDto::getKey).collect(toList(repositories.size()));
+    dbClient.ruleRepositoryDao().insertOrUpdate(dbSession, dtos);
+    dbClient.ruleRepositoryDao().deleteIfKeyNotIn(dbSession, keys);
     dbSession.commit();
   }
 
index 9027791549f73f9d04917a2ab237f4d511a4f9aa..e08f9ac7bd60d3c0d3d48aa700aeb82687623bc3 100644 (file)
@@ -38,9 +38,9 @@ import org.sonar.db.qualityprofile.QProfileDto;
 import org.sonar.db.qualityprofile.QualityProfileTesting;
 import org.sonar.db.rule.RuleDefinitionDto;
 import org.sonar.db.rule.RuleDto;
+import org.sonar.db.rule.RuleDto.Scope;
 import org.sonar.db.rule.RuleParamDto;
 import org.sonar.db.rule.RuleRepositoryDto;
-import org.sonar.db.rule.RuleDto.Scope;
 import org.sonar.server.language.LanguageTesting;
 import org.sonar.server.qualityprofile.QProfileComparison;
 import org.sonar.server.qualityprofile.QProfileName;
@@ -49,7 +49,7 @@ import org.sonar.server.tester.UserSessionRule;
 import org.sonar.server.ws.TestRequest;
 import org.sonar.server.ws.WsActionTester;
 
-import static java.util.Arrays.asList;
+import static java.util.Collections.singletonList;
 
 public class CompareActionTest {
 
@@ -246,7 +246,7 @@ public class CompareActionTest {
 
   private void createRepository(String repositoryKey, String repositoryLanguage, String repositoryName) {
     RuleRepositoryDto dto = new RuleRepositoryDto(repositoryKey, repositoryLanguage, repositoryName);
-    db.ruleRepositoryDao().insert(session, asList(dto));
+    db.ruleRepositoryDao().insertOrUpdate(session, singletonList(dto));
     session.commit();
   }
 }
index 429d8c8d561045e64e7c859a08e2a6437ad470a6..5200a4830736d14ef5f75479c7dbe754bcfed60c 100644 (file)
@@ -250,7 +250,7 @@ public class RegisterRulesTest {
   public void delete_repositories_that_have_been_uninstalled() {
     RuleRepositoryDto repository = new RuleRepositoryDto("findbugs", "java", "Findbugs");
     DbSession dbSession = dbTester.getSession();
-    dbTester.getDbClient().ruleRepositoryDao().insert(dbSession, singletonList(repository));
+    dbTester.getDbClient().ruleRepositoryDao().insertOrUpdate(dbSession, singletonList(repository));
     dbSession.commit();
 
     execute(new FakeRepositoryV1());
index 4806687bd9a1fbce70e87d654175ffec2b8a2a78..0d219a03efb511c2df91daab7b5c229ca704b138 100644 (file)
@@ -162,7 +162,7 @@ public class AppActionTest {
   private void insertRules() {
     RuleRepositoryDto repo1 = new RuleRepositoryDto("xoo", "xoo", "SonarQube");
     RuleRepositoryDto repo2 = new RuleRepositoryDto("squid", "ws", "SonarQube");
-    db.getDbClient().ruleRepositoryDao().insert(db.getSession(), asList(repo1, repo2));
+    db.getDbClient().ruleRepositoryDao().insertOrUpdate(db.getSession(), asList(repo1, repo2));
     db.getSession().commit();
   }
 
index 4a5f767e4c5e8ccb1d831f198dad35483c0b0b40..b17312693c1487f02597b7c26b6dee93674a1002 100644 (file)
@@ -45,7 +45,7 @@ public class RepositoriesActionTest {
     RuleRepositoryDto repo1 = new RuleRepositoryDto("xoo", "xoo", "SonarQube");
     RuleRepositoryDto repo2 = new RuleRepositoryDto("squid", "ws", "SonarQube");
     RuleRepositoryDto repo3 = new RuleRepositoryDto("common-ws", "ws", "SonarQube Common");
-    dbTester.getDbClient().ruleRepositoryDao().insert(dbSession, asList(repo1, repo2, repo3));
+    dbTester.getDbClient().ruleRepositoryDao().insertOrUpdate(dbSession, asList(repo1, repo2, repo3));
     dbSession.commit();
 
     wsTester = new WsTester(new RulesWs(new RepositoriesAction(dbTester.getDbClient())));