diff options
author | Teryk Bellahsene <teryk.bellahsene@sonarsource.com> | 2014-10-09 14:43:18 +0200 |
---|---|---|
committer | Teryk Bellahsene <teryk.bellahsene@sonarsource.com> | 2014-10-09 15:21:51 +0200 |
commit | 7238f4b5370b7a08145fc275ebc9900b82c2c4e3 (patch) | |
tree | 81f939b9010b38dca32cdb3753dd3af79a55161a | |
parent | 15b326bf6c8a77591a15f4b2705309c3cc68b186 (diff) | |
download | sonarqube-7238f4b5370b7a08145fc275ebc9900b82c2c4e3.tar.gz sonarqube-7238f4b5370b7a08145fc275ebc9900b82c2c4e3.zip |
fix large tests cause by a non standard sql query
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"> |