]> source.dussan.org Git - sonarqube.git/commitdiff
Fix measure data not being evicted anymore
authorDavid Gageot <david@gageot.net>
Mon, 16 Jul 2012 08:10:58 +0000 (10:10 +0200)
committerDavid Gageot <david@gageot.net>
Mon, 16 Jul 2012 08:17:08 +0000 (10:17 +0200)
sonar-batch/src/main/java/org/sonar/batch/index/MeasurePersister.java
sonar-batch/src/test/java/org/sonar/batch/index/MeasurePersisterTest.java
sonar-batch/src/test/resources/org/sonar/batch/index/MeasurePersisterTest/shouldInsertMeasureWithLargeData-result.xml
sonar-core/src/main/java/org/sonar/core/persistence/MyBatis.java
sonar-plugin-api/src/main/java/org/sonar/api/database/model/MeasureMapper.java
sonar-plugin-api/src/main/resources/org/sonar/api/database/model/MeasureMapper.xml

index 4ccc106b70a0f196e4d4c16d9ca2f4b17b03fc36..a03c6c903694bf474bbb77211c93ec0d676cb549 100644 (file)
@@ -188,7 +188,7 @@ public final class MeasurePersister {
       for (MeasureModel value : values) {
         mapper.insert(value);
         if (value.getMeasureData() != null) {
-          mapper.insertData(value);
+          mapper.insertData(value.getMeasureData());
         }
       }
 
@@ -208,7 +208,7 @@ public final class MeasurePersister {
 
       mapper.insert(value);
       if (value.getMeasureData() != null) {
-        mapper.insertData(value);
+        mapper.insertData(value.getMeasureData());
       }
 
       session.commit();
@@ -231,7 +231,7 @@ public final class MeasurePersister {
       mapper.update(value);
       mapper.deleteData(value);
       if (value.getMeasureData() != null) {
-        mapper.insertData(value);
+        mapper.insertData(value.getMeasureData());
       }
 
       session.commit();
index 26615c99a82a12261aca84c63702e0d72ae8e59c..c59dc0e7613a6cfe57547c3e57271d55fdb73215 100644 (file)
@@ -19,6 +19,8 @@
  */
 package org.sonar.batch.index;
 
+import org.mockito.ArgumentCaptor;
+
 import org.apache.commons.lang.StringUtils;
 import org.junit.Before;
 import org.junit.Test;
@@ -110,10 +112,14 @@ public class MeasurePersisterTest extends AbstractDaoTestCase {
   public void should_insert_measure_with_text_data() {
     setupData("empty");
 
-    measurePersister.saveMeasure(project, new Measure(ncloc()).setData(SHORT));
-    measurePersister.saveMeasure(project, new Measure(ncloc()).setData(LONG));
+    Measure withLargeData = new Measure(ncloc()).setData(LONG);
+    measurePersister.saveMeasure(project, withLargeData);
 
     checkTables("shouldInsertMeasureWithLargeData", "project_measures", "measure_data");
+
+    ArgumentCaptor<MeasureModel> validMeasureModel = ArgumentCaptor.forClass(MeasureModel.class);
+    verify(memoryOptimizer).evictDataMeasure(eq(withLargeData), validMeasureModel.capture());
+    assertThat(validMeasureModel.getValue().getMeasureData().getId()).isNotNull();
   }
 
   @Test
index c90db3d3f14564b4deed06e58fc83186bd48c249..77b6b6049a889d00a38bcdc24ba6cd0991726043 100644 (file)
@@ -1,18 +1,12 @@
 <dataset>
 
   <project_measures id="1" VALUE="[null]" METRIC_ID="1" SNAPSHOT_ID="3001" alert_text="[null]" RULES_CATEGORY_ID="[null]"
-                    RULE_ID="[null]" text_value="SHORT" tendency="[null]" measure_date="[null]" project_id="[null]"
-                    alert_status="[null]" description="[null]" rule_priority="[null]" characteristic_id="[null]" url="[null]"
-                    person_id="[null]"
-                    variation_value_1="[null]" variation_value_2="[null]" variation_value_3="[null]" variation_value_4="[null]" variation_value_5="[null]"/>
-
-  <project_measures id="2" VALUE="[null]" METRIC_ID="1" SNAPSHOT_ID="3001" alert_text="[null]" RULES_CATEGORY_ID="[null]"
                     RULE_ID="[null]" text_value="[null]"
                     tendency="[null]" measure_date="[null]" project_id="[null]"
                     alert_status="[null]" description="[null]" rule_priority="[null]" characteristic_id="[null]" url="[null]"
                     person_id="[null]"
                     variation_value_1="[null]" variation_value_2="[null]" variation_value_3="[null]" variation_value_4="[null]" variation_value_5="[null]"/>
 
-  <measure_data id="1" measure_id="2" snapshot_id="3001" data="MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OQ=="/>
+  <measure_data id="1" measure_id="1" snapshot_id="3001" data="MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OQ=="/>
 
 </dataset>
index 543f8f0f31a32d2698e3271c6e557d921c724176..e6a62e55356882fd1a669bbde0e03dbc3e99b290 100644 (file)
@@ -19,6 +19,8 @@
  */
 package org.sonar.core.persistence;
 
+import org.sonar.api.database.model.MeasureData;
+
 import ch.qos.logback.classic.Level;
 import com.google.common.io.Closeables;
 import org.apache.ibatis.builder.xml.XMLMapperBuilder;
@@ -138,6 +140,7 @@ public class MyBatis implements BatchComponent, ServerComponent {
     loadAlias(conf, "Widget", WidgetDto.class);
     loadAlias(conf, "WidgetProperty", WidgetPropertyDto.class);
     loadAlias(conf, "MeasureModel", MeasureModel.class);
+    loadAlias(conf, "MeasureData", MeasureData.class);
 
     Class<?>[] mappers = {ActiveDashboardMapper.class, AuthorMapper.class, FilterMapper.class, CriterionMapper.class, FilterColumnMapper.class, DashboardMapper.class,
       DependencyMapper.class, DuplicationMapper.class, LoadedTemplateMapper.class, PropertiesMapper.class, PurgeMapper.class,
index f9362533a764b03a692561783a91122245c59673..e5ca6ecac0ec4206928405a7192eff907b61b735 100644 (file)
@@ -22,7 +22,7 @@ package org.sonar.api.database.model;
 public interface MeasureMapper {
   void insert(MeasureModel measure);
 
-  void insertData(MeasureModel data);
+  void insertData(MeasureData data);
 
   void deleteData(MeasureModel data);
 
index cb892f7009a705a54edc64b2625873a2d2024d92..bbc0ba808ea20fa874866fdb203b78a3d466ce3d 100644 (file)
@@ -16,9 +16,9 @@
     )
   </insert>
 
-  <insert id="insertData" parameterType="MeasureModel" useGeneratedKeys="true">
+  <insert id="insertData" parameterType="MeasureData" useGeneratedKeys="true" keyProperty="id">
     INSERT INTO measure_data (measure_id, snapshot_id, data)
-    VALUES (#{id}, #{snapshotId}, #{measureData.data})
+    VALUES (#{measure.id}, #{measure.snapshotId}, #{data})
   </insert>
 
   <update id="deleteData" parameterType="MeasureModel">
@@ -64,9 +64,9 @@
     )
   </insert>
 
-  <insert id="insertData" databaseId="oracle" parameterType="MeasureModel" useGeneratedKeys="true">
+  <insert id="insertData" databaseId="oracle" parameterType="MeasureData" keyColumn="id" useGeneratedKeys="true" keyProperty="id">
     INSERT INTO measure_data (id, measure_id, snapshot_id, data)
-    VALUES (measure_data_seq.NEXTVAL, #{id}, #{snapshotId}, #{measureData.data})
+    VALUES (measure_data_seq.NEXTVAL, #{measure.id}, #{measure.snapshotId}, #{data})
   </insert>
 
 </mapper>