]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3437 Enable batch mode when saving measures into DB
authorJulien HENRY <julien.henry@sonarsource.com>
Wed, 30 Apr 2014 22:15:44 +0000 (00:15 +0200)
committerJulien HENRY <julien.henry@sonarsource.com>
Wed, 30 Apr 2014 22:16:30 +0000 (00:16 +0200)
sonar-batch/src/main/java/org/sonar/batch/index/MeasurePersister.java
sonar-batch/src/test/java/org/sonar/batch/index/MeasurePersisterTest.java
sonar-plugin-api/src/main/resources/org/sonar/api/database/model/MeasureMapper.xml

index 09dfd493df2ddbea783286d05d1f64cca418c66e..2edf522df7abfb1f53aad9d4c0bc611b68f6b07e 100644 (file)
@@ -20,7 +20,6 @@
 package org.sonar.batch.index;
 
 import com.google.common.annotations.VisibleForTesting;
-import org.apache.ibatis.session.SqlSession;
 import org.sonar.api.database.model.MeasureMapper;
 import org.sonar.api.database.model.MeasureModel;
 import org.sonar.api.database.model.Snapshot;
@@ -35,6 +34,7 @@ import org.sonar.api.technicaldebt.batch.Characteristic;
 import org.sonar.api.utils.SonarException;
 import org.sonar.batch.index.Cache.Entry;
 import org.sonar.batch.scan.measure.MeasureCache;
+import org.sonar.core.persistence.DbSession;
 import org.sonar.core.persistence.MyBatis;
 
 public final class MeasurePersister implements ScanPersister {
@@ -55,7 +55,7 @@ public final class MeasurePersister implements ScanPersister {
 
   @Override
   public void persist() {
-    SqlSession session = mybatis.openSession();
+    DbSession session = mybatis.openSession(true);
     try {
       MeasureMapper mapper = session.getMapper(MeasureMapper.class);
 
@@ -67,16 +67,13 @@ public final class MeasurePersister implements ScanPersister {
         if (shouldPersistMeasure(resource, measure)) {
           Snapshot snapshot = snapshotCache.get(effectiveKey);
           MeasureModel measureModel = model(measure).setSnapshotId(snapshot.getId());
-          try {
-            mapper.insert(measureModel);
-          } catch (Exception e) {
-            // SONAR-4066
-            throw new SonarException(String.format("Unable to save measure for metric [%s] on component [%s]", measure.getMetricKey(), resource.getKey()), e);
-          }
+          mapper.insert(measureModel);
         }
       }
 
       session.commit();
+    } catch (Exception e) {
+      throw new SonarException("Unable to save some measures", e);
     } finally {
       MyBatis.closeQuietly(session);
     }
index f0a2bb666aa0dabd04792658d6798f740c3c4641..feb8094889bc02b980361c09400e20ff26d8f7d5 100644 (file)
@@ -97,14 +97,14 @@ public class MeasurePersisterTest extends AbstractDaoTestCase {
   }
 
   @Test
-  public void should_display_contextual_info_when_error_during_insert_measure() {
+  public void should_display_message_when_error_during_insert_measure() {
     setupData("empty");
 
     Measure measure = new Measure(ncloc()).setValue(1234.0).setAlertText(TOO_LONG);
     when(measureCache.entries()).thenReturn(Arrays.asList(new Cache.Entry<Measure>(new String[] {"foo", "ncloc"}, measure)));
 
     thrown.expect(SonarException.class);
-    thrown.expectMessage("Unable to save measure for metric [ncloc] on component [foo]");
+    thrown.expectMessage("Unable to save some measures");
 
     measurePersister.persist();
   }
index 6cb43d9509b4f844f73f77d0798c3ff2fb9e11d0..6ac04e44508a930988ab4b5ce34f71185ff346f3 100644 (file)
@@ -3,7 +3,7 @@
 
 <mapper namespace="org.sonar.api.database.model.MeasureMapper">
 
-  <insert id="insert" parameterType="MeasureModel" keyColumn="id" useGeneratedKeys="true" keyProperty="id">
+  <insert id="insert" parameterType="MeasureModel" useGeneratedKeys="false">
     INSERT INTO project_measures (
       value, metric_id, snapshot_id, rule_id, text_value, tendency, measure_date,
       project_id, alert_status, alert_text, url, description, rule_priority, characteristic_id, variation_value_1,