Skip to content

Commit

Permalink
SONAR-10594 do not truncate rule repositories at startup
Browse files Browse the repository at this point in the history
  • Loading branch information
Simon Brandhof authored and SonarTech committed May 10, 2018
1 parent ff98ac3 commit 02befe2
Show file tree
Hide file tree
Showing 9 changed files with 11 additions and 68 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -52,18 +52,6 @@ public List<RuleRepositoryDto> selectByLanguage(DbSession dbSession, String lang
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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,6 @@
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 (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,40 +122,13 @@ public void deleteIfKeyNotIn_fails_if_more_than_1000_keys() {
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
Expand All @@ -166,24 +139,11 @@ public void selectByLanguage() {
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");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -325,12 +325,13 @@ private void ensureKnown(RuleDefinitionDto ruleDefinition) {
}

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();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@
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;
Expand All @@ -49,7 +49,7 @@
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 {

Expand Down Expand Up @@ -246,7 +246,7 @@ private ActiveRuleDto createActiveRuleWithSeverity(RuleDefinitionDto rule, QProf

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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ public void mass_insert_then_remove_rule() {
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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ public void canWrite_is_false_if_user_is_not_profile_administrator_of_default_or
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();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public void setUp() {
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())));
Expand Down

0 comments on commit 02befe2

Please sign in to comment.