aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2014-10-09 14:43:18 +0200
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2014-10-09 15:21:51 +0200
commit7238f4b5370b7a08145fc275ebc9900b82c2c4e3 (patch)
tree81f939b9010b38dca32cdb3753dd3af79a55161a
parent15b326bf6c8a77591a15f4b2705309c3cc68b186 (diff)
downloadsonarqube-7238f4b5370b7a08145fc275ebc9900b82c2c4e3.tar.gz
sonarqube-7238f4b5370b7a08145fc275ebc9900b82c2c4e3.zip
fix large tests cause by a non standard sql query
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java17
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/db/AnalysisReportDao.java3
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java25
-rw-r--r--sonar-core/src/main/java/org/sonar/core/computation/db/AnalysisReportDto.java5
-rw-r--r--sonar-core/src/main/java/org/sonar/core/computation/db/AnalysisReportMapper.java3
-rw-r--r--sonar-core/src/main/resources/org/sonar/core/computation/db/AnalysisReportMapper.xml12
6 files changed, 44 insertions, 21 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java b/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java
index 3ab613cdf6c..597e1b9ce62 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java
@@ -70,7 +70,6 @@ public class ComputationService implements ServerComponent {
checkThatProjectExistsInDatabase(projectKey, session);
insertReportInDatabase(report, session);
} finally {
- LOG.debug(String.format("Analysis for project '%s' inserted in the queue", projectKey));
MyBatis.closeQuietly(session);
}
}
@@ -127,18 +126,22 @@ public class ComputationService implements ServerComponent {
synchronizeProjectPermissionsIfNotFound(session, projectKey);
indexProjectIssues(session, projectKey);
} catch (Exception exception) {
- LOG.debug(String.format("Error during analysis '%s' of project '%s'", report.getId(), projectKey), exception);
+ LOG.error(String.format("Error while analyzing %s'", report), exception);
} finally {
- deleteReportFromQueue(session, report);
+ removeSilentlyReportFromQueue(session, report);
MyBatis.closeQuietly(session);
}
- LOG.debug(String.format("Analysis '%s' of project '%s' successfully finished.", report.getId(), projectKey));
+ LOG.info(String.format("Analysis of %s successfully finished.", report));
}
- private void deleteReportFromQueue(DbSession session, AnalysisReportDto report) {
- dao.delete(session, report);
- session.commit();
+ private void removeSilentlyReportFromQueue(DbSession session, AnalysisReportDto report) {
+ try {
+ dao.delete(session, report);
+ session.commit();
+ } catch (Exception exception) {
+ LOG.error(String.format("Error while the report analysis, deleting %s", report), exception);
+ }
}
private void indexProjectIssues(DbSession session, String projectKey) {
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/db/AnalysisReportDao.java b/server/sonar-server/src/main/java/org/sonar/server/computation/db/AnalysisReportDao.java
index 200c36f7596..30684f745f3 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/db/AnalysisReportDao.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/db/AnalysisReportDao.java
@@ -89,8 +89,9 @@ public class AnalysisReportDao extends BaseDao<AnalysisReportMapper, AnalysisRep
@CheckForNull
public AnalysisReportDto tryToBookReportAnalysis(DbSession session, AnalysisReportDto report) {
checkNotNull(report.getId());
+ checkNotNull(report.getProjectKey());
- int nbOfReportBooked = mapper(session).updateWithBookingReport(report.getId(), new Date(system2.now()), PENDING, WORKING);
+ int nbOfReportBooked = mapper(session).updateWithBookingReport(report.getId(), report.getProjectKey(), new Date(system2.now()), PENDING, WORKING);
if (nbOfReportBooked == 0) {
return null;
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java
index bca5e5be1b1..9555d4f72d1 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java
@@ -41,6 +41,8 @@ import static org.sonar.core.computation.db.AnalysisReportDto.Status.PENDING;
import static org.sonar.core.computation.db.AnalysisReportDto.Status.WORKING;
public class AnalysisReportDaoTest {
+ private static final String DEFAULT_PROJECT_KEY = "123456789-987654321";
+
@Rule
public TestDatabase db = new TestDatabase();
private AnalysisReportDao dao;
@@ -64,7 +66,7 @@ public class AnalysisReportDaoTest {
@Test
public void insert_multiple_reports() {
AnalysisReportDto report = new AnalysisReportDto()
- .setProjectKey("123456789-987654321")
+ .setProjectKey(DEFAULT_PROJECT_KEY)
.setData("data-project")
.setStatus(PENDING);
report.setCreatedAt(DateUtils.parseDate("2014-09-24"))
@@ -183,7 +185,7 @@ public class AnalysisReportDaoTest {
public void cannot_book_an_already_working_report_analysis() {
db.prepareDbUnit(getClass(), "one_busy_report_analysis.xml");
- AnalysisReportDto report = AnalysisReportDto.newForTests(1L);
+ AnalysisReportDto report = newDefaultReport();
AnalysisReportDto reportBooked = dao.tryToBookReportAnalysis(session, report);
assertThat(reportBooked).isNull();
@@ -195,7 +197,7 @@ public class AnalysisReportDaoTest {
when(system2.now()).thenReturn(mockedNow.getTime());
db.prepareDbUnit(getClass(), "one_available_analysis.xml");
- AnalysisReportDto report = AnalysisReportDto.newForTests(1L);
+ AnalysisReportDto report = newDefaultReport();
AnalysisReportDto reportBooked = dao.tryToBookReportAnalysis(session, report);
assertThat(reportBooked.getId()).isEqualTo(1L);
@@ -207,7 +209,7 @@ public class AnalysisReportDaoTest {
public void cannot_book_available_report_analysis_while_having_a_working_one_on_the_same_project() {
db.prepareDbUnit(getClass(), "one_available_analysis_but_another_busy_on_same_project.xml");
- AnalysisReportDto report = AnalysisReportDto.newForTests(1L);
+ AnalysisReportDto report = newDefaultReport();
AnalysisReportDto reportBooked = dao.tryToBookReportAnalysis(session, report);
assertThat(reportBooked).isNull();
@@ -217,7 +219,7 @@ public class AnalysisReportDaoTest {
public void book_available_report_analysis_while_having_one_working_one_another() {
db.prepareDbUnit(getClass(), "book_available_report_analysis_while_having_one_working_one_another.xml");
- AnalysisReportDto report = AnalysisReportDto.newForTests(1L);
+ AnalysisReportDto report = newDefaultReport();
AnalysisReportDto reportBooked = dao.tryToBookReportAnalysis(session, report);
assertThat(reportBooked.getId()).isEqualTo(1L);
@@ -227,7 +229,7 @@ public class AnalysisReportDaoTest {
public void delete_one_analysis_report() {
db.prepareDbUnit(getClass(), "one_analysis_report.xml");
- dao.delete(session, AnalysisReportDto.newForTests(1L));
+ dao.delete(session, newDefaultReport());
session.commit();
db.assertDbUnit(getClass(), "truncate-result.xml", "analysis_reports");
@@ -247,4 +249,15 @@ public class AnalysisReportDaoTest {
public void doUpdate_is_not_implemented_yet() {
dao.doUpdate(session, new AnalysisReportDto());
}
+
+ private AnalysisReportDto newDefaultReport() {
+ AnalysisReportDto report = AnalysisReportDto.newForTests(1L)
+ .setStatus(PENDING)
+ .setProjectKey(DEFAULT_PROJECT_KEY);
+ report
+ .setCreatedAt(DateUtils.parseDate("2014-09-30"))
+ .setUpdatedAt(DateUtils.parseDate("2014-09-30"));
+
+ return report;
+ }
}
diff --git a/sonar-core/src/main/java/org/sonar/core/computation/db/AnalysisReportDto.java b/sonar-core/src/main/java/org/sonar/core/computation/db/AnalysisReportDto.java
index dd50da26adb..2547c513214 100644
--- a/sonar-core/src/main/java/org/sonar/core/computation/db/AnalysisReportDto.java
+++ b/sonar-core/src/main/java/org/sonar/core/computation/db/AnalysisReportDto.java
@@ -79,6 +79,11 @@ public class AnalysisReportDto extends Dto<String> {
return id;
}
+ @Override
+ public String toString() {
+ return String.format("analysis report {id:%s;project:'%s'}", getId(), getProjectKey());
+ }
+
public enum Status {
PENDING, WORKING
}
diff --git a/sonar-core/src/main/java/org/sonar/core/computation/db/AnalysisReportMapper.java b/sonar-core/src/main/java/org/sonar/core/computation/db/AnalysisReportMapper.java
index 460cea7d5c7..976f57dda5b 100644
--- a/sonar-core/src/main/java/org/sonar/core/computation/db/AnalysisReportMapper.java
+++ b/sonar-core/src/main/java/org/sonar/core/computation/db/AnalysisReportMapper.java
@@ -43,7 +43,8 @@ public interface AnalysisReportMapper {
int update(AnalysisReportDto report);
- int updateWithBookingReport(@Param("id") Long id, @Param("updatedAt") Date updatedAt, @Param("availableStatus") AnalysisReportDto.Status availableStatus,
+ int updateWithBookingReport(@Param("id") Long id, @Param("projectKey") String projectKey, @Param("updatedAt") Date updatedAt,
+ @Param("availableStatus") AnalysisReportDto.Status availableStatus,
@Param("busyStatus") AnalysisReportDto.Status busyStatus);
AnalysisReportDto selectById(Long id);
diff --git a/sonar-core/src/main/resources/org/sonar/core/computation/db/AnalysisReportMapper.xml b/sonar-core/src/main/resources/org/sonar/core/computation/db/AnalysisReportMapper.xml
index c5b1e69c81a..eb88a2b4a42 100644
--- a/sonar-core/src/main/resources/org/sonar/core/computation/db/AnalysisReportMapper.xml
+++ b/sonar-core/src/main/resources/org/sonar/core/computation/db/AnalysisReportMapper.xml
@@ -23,15 +23,15 @@
</update>
<update id="updateWithBookingReport" parameterType="map">
- update analysis_reports ar1
+ update analysis_reports
set report_status=#{busyStatus},
updated_at=#{updatedAt}
- where ar1.id=#{id} and ar1.report_status=#{availableStatus}
+ where id=#{id} and report_status=#{availableStatus}
and not exists(
select 1
- from analysis_reports ar2
- where ar1.project_key=ar2.project_key
- and ar2.report_status=#{busyStatus}
+ from analysis_reports ar
+ where ar.project_key=#{projectKey}
+ and ar.report_status=#{busyStatus}
)
</update>
@@ -40,7 +40,7 @@
</delete>
<delete id="delete">
- delete analysis_reports where id=#{id}
+ delete from analysis_reports where id=#{id}
</delete>
<select id="selectById" resultType="AnalysisReport">