Browse Source

SONAR-15236 Check that data is indexed in ElasticSearch before DB commit

tags/9.1.0.47736
Duarte Meneses 2 years ago
parent
commit
19a3a4e2e8

+ 6
- 0
server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/DefaultQProfileDao.java View File

@@ -46,6 +46,12 @@ public class DefaultQProfileDao implements Dao {
}
}

public void insert(DbSession dbSession, DefaultQProfileDto dto) {
long now = system2.now();
DefaultQProfileMapper mapper = mapper(dbSession);
mapper.insert(dto, now);
}

public void deleteByQProfileUuids(DbSession dbSession, Collection<String> qProfileUuids) {
DefaultQProfileMapper mapper = mapper(dbSession);
DatabaseUtils.executeLargeUpdates(qProfileUuids, mapper::deleteByQProfileUuids);

+ 13
- 0
server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/DefaultQProfileDaoTest.java View File

@@ -37,6 +37,7 @@ public class DefaultQProfileDaoTest {
public DbTester dbTester = DbTester.create(System2.INSTANCE);

private DbSession dbSession = dbTester.getSession();

private DefaultQProfileDao underTest = dbTester.getDbClient().defaultQProfileDao();

@Test
@@ -69,6 +70,18 @@ public class DefaultQProfileDaoTest {
assertThat(selectUuidOfDefaultProfile(dto.getLanguage())).hasValue(newQProfileUuid);
}

@Test
public void insert_row() {
String previousQProfileUuid = Uuids.create();
DefaultQProfileDto dto = new DefaultQProfileDto()
.setLanguage("java")
.setQProfileUuid(previousQProfileUuid);
underTest.insert(dbSession, dto);
dbSession.commit();
assertThat(countRows()).isEqualTo(1);
assertThat(selectUuidOfDefaultProfile(dto.getLanguage())).hasValue(dto.getQProfileUuid());
}

@Test
public void deleteByQProfileUuids_deletes_rows_related_to_specified_profile() {
underTest.insertOrUpdate(dbSession, new DefaultQProfileDto().setLanguage("java").setQProfileUuid("u1"));

+ 2
- 2
server/sonar-webserver-auth/src/main/java/org/sonar/server/qualityprofile/BuiltInQProfileInsert.java View File

@@ -24,7 +24,7 @@ import org.sonar.db.DbSession;
public interface BuiltInQProfileInsert {
/**
* Persist a new built-in profile
* Db sessions are committed and Elasticsearch indices are updated..
* Db sessions are committed and Elasticsearch indices are updated
*/
void create(DbSession session, DbSession batchSession, BuiltInQProfile builtInQProfile);
void create(DbSession batchSession, BuiltInQProfile builtInQProfile);
}

+ 10
- 13
server/sonar-webserver-auth/src/main/java/org/sonar/server/qualityprofile/BuiltInQProfileInsertImpl.java View File

@@ -76,29 +76,26 @@ public class BuiltInQProfileInsertImpl implements BuiltInQProfileInsert {
}

@Override
public void create(DbSession dbSession, DbSession batchDbSession, BuiltInQProfile builtInQProfile) {
public void create(DbSession batchDbSession, BuiltInQProfile builtInQProfile) {
initRuleRepository(batchDbSession);

Date now = new Date(system2.now());
RulesProfileDto ruleProfile = insertRulesProfile(dbSession, builtInQProfile, now);
RulesProfileDto ruleProfile = insertRulesProfile(batchDbSession, builtInQProfile, now);

List<ActiveRuleChange> changes = builtInQProfile.getActiveRules().stream()
.map(activeRule -> insertActiveRule(dbSession, batchDbSession, ruleProfile, activeRule, now.getTime()))
.map(activeRule -> insertActiveRule(batchDbSession, ruleProfile, activeRule, now.getTime()))
.collect(MoreCollectors.toList());

changes.forEach(change -> dbClient.qProfileChangeDao().insert(batchDbSession, change.toDto(null)));

createDefaultAndOrgQProfiles(dbSession, batchDbSession, builtInQProfile, ruleProfile);
createDefaultAndOrgQProfiles(batchDbSession, builtInQProfile, ruleProfile);

// TODO batch statements should be executed through dbSession
batchDbSession.commit();

activeRuleIndexer.commitAndIndex(dbSession, changes);
activeRuleIndexer.commitAndIndex(batchDbSession, changes);
}


private void createDefaultAndOrgQProfiles(DbSession dbSession, DbSession batchDbSession, BuiltInQProfile builtIn, RulesProfileDto rulesProfileDto) {
Optional<String> qProfileUuid = dbClient.defaultQProfileDao().selectDefaultQProfileUuid(dbSession, builtIn.getLanguage());
private void createDefaultAndOrgQProfiles(DbSession batchDbSession, BuiltInQProfile builtIn, RulesProfileDto rulesProfileDto) {
Optional<String> qProfileUuid = dbClient.defaultQProfileDao().selectDefaultQProfileUuid(batchDbSession, builtIn.getLanguage());

OrgQProfileDto dto = new OrgQProfileDto()
.setRulesProfileUuid(rulesProfileDto.getUuid())
@@ -108,7 +105,7 @@ public class BuiltInQProfileInsertImpl implements BuiltInQProfileInsert {
DefaultQProfileDto defaultQProfileDto = new DefaultQProfileDto()
.setQProfileUuid(dto.getUuid())
.setLanguage(builtIn.getLanguage());
dbClient.defaultQProfileDao().insertOrUpdate(dbSession, defaultQProfileDto);
dbClient.defaultQProfileDao().insert(batchDbSession, defaultQProfileDto);
}

dbClient.qualityProfileDao().insert(batchDbSession, dto);
@@ -131,7 +128,7 @@ public class BuiltInQProfileInsertImpl implements BuiltInQProfileInsert {
return dto;
}

private ActiveRuleChange insertActiveRule(DbSession dbSession, DbSession batchDbSession, RulesProfileDto rulesProfileDto, BuiltInQProfile.ActiveRule activeRule, long now) {
private ActiveRuleChange insertActiveRule(DbSession batchDbSession, RulesProfileDto rulesProfileDto, BuiltInQProfile.ActiveRule activeRule, long now) {
RuleKey ruleKey = activeRule.getRuleKey();
RuleDefinitionDto ruleDefinitionDto = ruleRepository.getDefinition(ruleKey)
.orElseThrow(() -> new IllegalStateException("RuleDefinition not found for key " + ruleKey));
@@ -145,7 +142,7 @@ public class BuiltInQProfileInsertImpl implements BuiltInQProfileInsert {
dto.setCreatedAt(now);
dbClient.activeRuleDao().insert(batchDbSession, dto);

List<ActiveRuleParamDto> paramDtos = insertActiveRuleParams(dbSession, activeRule, dto);
List<ActiveRuleParamDto> paramDtos = insertActiveRuleParams(batchDbSession, activeRule, dto);

ActiveRuleChange change = new ActiveRuleChange(ActiveRuleChange.Type.ACTIVATED, dto, ruleDefinitionDto);
change.setSeverity(dto.getSeverityString());

+ 1
- 1
server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/RegisterQualityProfiles.java View File

@@ -123,7 +123,7 @@ public class RegisterQualityProfiles implements Startable {

renameOutdatedProfiles(dbSession, builtIn);

builtInQProfileInsert.create(dbSession, batchDbSession, builtIn);
builtInQProfileInsert.create(batchDbSession, builtIn);
}

private List<ActiveRuleChange> update(DbSession dbSession, BuiltInQProfile definition, RulesProfileDto dbProfile) {

+ 1
- 1
server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/RegisterQualityProfilesTest.java View File

@@ -194,7 +194,7 @@ public class RegisterQualityProfilesTest {
private final List<BuiltInQProfile> callLogs = new ArrayList<>();

@Override
public void create(DbSession dbSession, DbSession batchDbSession, BuiltInQProfile builtIn) {
public void create(DbSession batchDbSession, BuiltInQProfile builtIn) {
callLogs.add(builtIn);
}
}

Loading…
Cancel
Save