From 02befe2d6ea9647a94f03e59189f76cc613508f7 Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Tue, 17 Apr 2018 20:10:20 +0200 Subject: [PATCH] SONAR-10594 do not truncate rule repositories at startup --- .../org/sonar/db/rule/RuleRepositoryDao.java | 12 ----- .../sonar/db/rule/RuleRepositoryMapper.java | 2 - .../sonar/db/rule/RuleRepositoryMapper.xml | 4 -- .../sonar/db/rule/RuleRepositoryDaoTest.java | 44 +------------------ .../org/sonar/server/rule/RegisterRules.java | 5 ++- .../qualityprofile/ws/CompareActionTest.java | 6 +-- .../sonar/server/rule/RegisterRulesTest.java | 2 +- .../sonar/server/rule/ws/AppActionTest.java | 2 +- .../rule/ws/RepositoriesActionTest.java | 2 +- 9 files changed, 11 insertions(+), 68 deletions(-) diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleRepositoryDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleRepositoryDao.java index 61b06e6ab3f..c5bc57ba1bc 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleRepositoryDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleRepositoryDao.java @@ -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 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 dtos) { RuleRepositoryMapper mapper = dbSession.getMapper(RuleRepositoryMapper.class); long now = system2.now(); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleRepositoryMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleRepositoryMapper.java index a33adbcf3a0..4ead93da959 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleRepositoryMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleRepositoryMapper.java @@ -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); diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/rule/RuleRepositoryMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/rule/RuleRepositoryMapper.xml index d15ddce28dc..b6e3321b950 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/rule/RuleRepositoryMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/rule/RuleRepositoryMapper.xml @@ -20,10 +20,6 @@ order by kee - - delete from rule_repositories - - insert into rule_repositories (kee, language, name, created_at) values ( diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/rule/RuleRepositoryDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/rule/RuleRepositoryDaoTest.java index 8c711fa1a7a..4184d7f6246 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/rule/RuleRepositoryDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/rule/RuleRepositoryDaoTest.java @@ -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 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"); diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/RegisterRules.java b/server/sonar-server/src/main/java/org/sonar/server/rule/RegisterRules.java index 9f9d1ce3764..ba7e348ea02 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/RegisterRules.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/RegisterRules.java @@ -325,12 +325,13 @@ public class RegisterRules implements Startable { } private void persistRepositories(DbSession dbSession, List repositories) { - dbClient.ruleRepositoryDao().truncate(dbSession); List dtos = repositories .stream() .map(r -> new RuleRepositoryDto(r.key(), r.language(), r.name())) .collect(toList(repositories.size())); - dbClient.ruleRepositoryDao().insert(dbSession, dtos); + List keys = dtos.stream().map(RuleRepositoryDto::getKey).collect(toList(repositories.size())); + dbClient.ruleRepositoryDao().insertOrUpdate(dbSession, dtos); + dbClient.ruleRepositoryDao().deleteIfKeyNotIn(dbSession, keys); dbSession.commit(); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/CompareActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/CompareActionTest.java index 9027791549f..e08f9ac7bd6 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/CompareActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/CompareActionTest.java @@ -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(); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/RegisterRulesTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/RegisterRulesTest.java index 429d8c8d561..5200a483073 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/RegisterRulesTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/RegisterRulesTest.java @@ -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()); diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/AppActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/AppActionTest.java index 4806687bd9a..0d219a03efb 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/AppActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/AppActionTest.java @@ -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(); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/RepositoriesActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/RepositoriesActionTest.java index 4a5f767e4c5..b17312693c1 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/RepositoriesActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/RepositoriesActionTest.java @@ -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()))); -- 2.39.5