From 5e691b5d2c39e58a626b8ed29207cdcab1bb1223 Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Fri, 13 Mar 2015 17:43:27 +0100 Subject: Improve db migration from 5.0 and indexing step at server startup * Parallel bulk indexing of documents into Elasticsearch * reduce memory consumption when building JSON requests * no need to change type of column PROJECT_MEASURES.MEASURE_DATE as it is not used * fix created_at/updated_at fields of manual_measure when saved from Rails * remove usage of deprecated delete-by-query --- .../org/sonar/api/database/model/MeasureModel.java | 51 +++------------------- .../java/org/sonar/api/utils/text/JsonWriter.java | 5 +++ .../org/sonar/api/database/model/MeasureMapper.xml | 4 +- .../org/sonar/api/utils/text/JsonWriterTest.java | 16 ++++++- 4 files changed, 29 insertions(+), 47 deletions(-) (limited to 'sonar-plugin-api') diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/database/model/MeasureModel.java b/sonar-plugin-api/src/main/java/org/sonar/api/database/model/MeasureModel.java index dc5847f7564..8ab131f2168 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/database/model/MeasureModel.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/database/model/MeasureModel.java @@ -27,13 +27,14 @@ import org.sonar.api.database.DatabaseSession; import org.sonar.api.measures.Metric; import org.sonar.api.rules.RulePriority; -import javax.persistence.*; - +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; import java.io.UnsupportedEncodingException; -import java.util.Date; - -import static org.sonar.api.utils.DateUtils.dateToLong; -import static org.sonar.api.utils.DateUtils.longToDate; /** * This class is the Hibernate model to store a measure in the DB @@ -70,9 +71,6 @@ public class MeasureModel implements Cloneable { @Column(name = "description", updatable = true, nullable = true, length = 4000) private String description; - @Column(name = "measure_date", updatable = true, nullable = true) - private Long measureDate; - @Column(name = "rule_id", updatable = true, nullable = true) private Integer ruleId; @@ -305,40 +303,6 @@ public class MeasureModel implements Cloneable { this.projectId = projectId; } - /** - * @return the date of the measure - */ - public Date getMeasureDate() { - return longToDate(measureDate); - } - - /** - * Sets the date for the measure - * - * @return the current object - */ - public MeasureModel setMeasureDate(Date measureDate) { - this.measureDate = dateToLong(measureDate); - return this; - } - - /** - * @return the date of the measure - */ - public Long getMeasureDateMs() { - return measureDate; - } - - /** - * Sets the date for the measure - * - * @return the current object - */ - public MeasureModel setMeasureDateMs(Long measureDate) { - this.measureDate = measureDate; - return this; - } - /** * @return the alert status if there is one, null otherwise */ @@ -519,7 +483,6 @@ public class MeasureModel implements Cloneable { clone.setRulePriority(getRulePriority()); clone.setRuleId(getRuleId()); clone.setSnapshotId(getSnapshotId()); - clone.setMeasureDate(getMeasureDate()); clone.setUrl(getUrl()); clone.setCharacteristicId(getCharacteristicId()); clone.setPersonId(getPersonId()); diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/text/JsonWriter.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/text/JsonWriter.java index f8645826374..dae87d0522f 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/utils/text/JsonWriter.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/utils/text/JsonWriter.java @@ -69,6 +69,11 @@ public class JsonWriter { return new JsonWriter(writer); } + public JsonWriter setSerializeNulls(boolean b) { + this.stream.setSerializeNulls(b); + return this; + } + /** * Begins encoding a new array. Each call to this method must be paired with * a call to {@link #endArray}. Output is [. diff --git a/sonar-plugin-api/src/main/resources/org/sonar/api/database/model/MeasureMapper.xml b/sonar-plugin-api/src/main/resources/org/sonar/api/database/model/MeasureMapper.xml index 66b00baacae..1bf6e453f64 100644 --- a/sonar-plugin-api/src/main/resources/org/sonar/api/database/model/MeasureMapper.xml +++ b/sonar-plugin-api/src/main/resources/org/sonar/api/database/model/MeasureMapper.xml @@ -5,12 +5,12 @@ INSERT INTO project_measures ( - value, metric_id, snapshot_id, rule_id, text_value, tendency, measure_date, + value, metric_id, snapshot_id, rule_id, text_value, tendency, project_id, alert_status, alert_text, url, description, rule_priority, characteristic_id, variation_value_1, variation_value_2, variation_value_3, variation_value_4, variation_value_5, person_id, measure_data) VALUES ( #{value, jdbcType=DOUBLE}, #{metricId, jdbcType=INTEGER}, #{snapshotId, jdbcType=INTEGER}, #{ruleId, jdbcType=INTEGER}, #{textValue, jdbcType=VARCHAR}, #{tendency, jdbcType=INTEGER}, - #{measureDateMs, jdbcType=BIGINT}, #{projectId, jdbcType=INTEGER}, #{alertStatus, jdbcType=VARCHAR}, #{alertText, jdbcType=VARCHAR}, + #{projectId, jdbcType=INTEGER}, #{alertStatus, jdbcType=VARCHAR}, #{alertText, jdbcType=VARCHAR}, #{url, jdbcType=VARCHAR}, #{description, jdbcType=VARCHAR}, #{rulePriority.ordinal, jdbcType=INTEGER}, #{characteristicId, jdbcType=INTEGER}, #{variationValue1, jdbcType=DOUBLE}, #{variationValue2, jdbcType=DOUBLE}, #{variationValue3, jdbcType=DOUBLE}, #{variationValue4, jdbcType=DOUBLE}, #{variationValue5, jdbcType=DOUBLE}, #{personId, jdbcType=INTEGER}, #{data} ) diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/utils/text/JsonWriterTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/utils/text/JsonWriterTest.java index 45280508abb..f0de3de0434 100644 --- a/sonar-plugin-api/src/test/java/org/sonar/api/utils/text/JsonWriterTest.java +++ b/sonar-plugin-api/src/test/java/org/sonar/api/utils/text/JsonWriterTest.java @@ -101,7 +101,7 @@ public class JsonWriterTest { } @Test - public void ignore_null_values() throws Exception { + public void ignore_null_values_by_default() throws Exception { writer.beginObject() .prop("nullNumber", (Number) null) .prop("nullString", (String) null) @@ -113,6 +113,20 @@ public class JsonWriterTest { expect("{}"); } + @Test + public void serialize_null_values() throws Exception { + writer.setSerializeNulls(true); + writer.beginObject() + .prop("nullNumber", (Number) null) + .prop("nullString", (String) null) + .name("nullNumber").value((Number) null) + .name("nullString").value((String) null) + .name("nullDate").valueDate(null) + .name("nullDateTime").valueDate(null) + .endObject().close(); + expect("{\"nullNumber\":null,\"nullString\":null,\"nullNumber\":null,\"nullString\":null,\"nullDate\":null,\"nullDateTime\":null}"); + } + @Test public void escape_values() throws Exception { writer.beginObject() -- cgit v1.2.3