]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-15236 Check that data is indexed in ElasticSearch before DB commit
authorDuarte Meneses <duarte.meneses@sonarsource.com>
Tue, 3 Aug 2021 21:01:29 +0000 (16:01 -0500)
committersonartech <sonartech@sonarsource.com>
Wed, 4 Aug 2021 20:08:14 +0000 (20:08 +0000)
server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/DefaultQProfileDao.java
server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/DefaultQProfileDaoTest.java
server/sonar-webserver-auth/src/main/java/org/sonar/server/qualityprofile/BuiltInQProfileInsert.java
server/sonar-webserver-auth/src/main/java/org/sonar/server/qualityprofile/BuiltInQProfileInsertImpl.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/RegisterQualityProfiles.java
server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/RegisterQualityProfilesTest.java

index 9b3a98f169188f29d891bc8963cc7f877118ffa8..05e1cb4dac387141f719a5d525af6a4226353801 100644 (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);
index 2e2819206861f8302ee6737b853b418b3b338d95..81bbf2912e5150286360b82c6b63b5530ba3a67c 100644 (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"));
index bbc673563ec9ddd8e2a45dd5da27d9306f5d0db0..bf5dd5115cc867ff9624b38b609a795050485b6c 100644 (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);
 }
index b238609da7993d6514a0e97cd33172cdeb261f68..91d68f1c74961b7790bc69cd62e45ca22863da02 100644 (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());
index 5ae58489e681f1dba3db34a98364c4e95d931d2e..c1f04be1202fb638d3a5b203ce2f4df8861fad8b 100644 (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) {
index 0a40a5cd1cdb3535e542de19eba381692590f8d6..be8e22f8b3f7156097b48e8360fb3e79117a8f8d 100644 (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);
     }
   }