From: Eric Hartmann Date: Fri, 8 Sep 2017 08:26:49 +0000 (+0200) Subject: SONAR-9762 Add a meaningful error message when purge is failing X-Git-Tag: 6.6-RC1~301 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=dc5f68488fc62ac6dbaa3f0135ecdb5fa333105e;p=sonarqube.git SONAR-9762 Add a meaningful error message when purge is failing --- diff --git a/server/sonar-ce/src/main/java/org/sonar/ce/queue/InternalCeQueueImpl.java b/server/sonar-ce/src/main/java/org/sonar/ce/queue/InternalCeQueueImpl.java index 49ae50087de..adb63e13a23 100644 --- a/server/sonar-ce/src/main/java/org/sonar/ce/queue/InternalCeQueueImpl.java +++ b/server/sonar-ce/src/main/java/org/sonar/ce/queue/InternalCeQueueImpl.java @@ -40,9 +40,11 @@ import org.sonar.db.DbSession; import org.sonar.db.ce.CeActivityDto; import org.sonar.db.ce.CeQueueDao; import org.sonar.db.ce.CeQueueDto; +import org.sonar.server.computation.task.projectanalysis.component.VisitException; import org.sonar.server.organization.DefaultOrganizationProvider; import static com.google.common.base.Preconditions.checkArgument; +import static java.lang.String.format; import static java.util.Objects.requireNonNull; @ComputeEngineSide @@ -120,7 +122,11 @@ public class InternalCeQueueImpl extends CeQueueImpl implements InternalCeQueue return; } - activityDto.setErrorMessage(error.getMessage()); + if (error instanceof VisitException && error.getCause() != null) { + activityDto.setErrorMessage(format("%s (%s)", error.getCause().getMessage(), error.getMessage())); + } else { + activityDto.setErrorMessage(error.getMessage()); + } String stacktrace = getStackTraceForPersistence(error); if (stacktrace != null) { activityDto.setErrorStacktrace(stacktrace); diff --git a/tests/src/test/java/org/sonarqube/tests/analysis/AnalysisEsResilienceTest.java b/tests/src/test/java/org/sonarqube/tests/analysis/AnalysisEsResilienceTest.java index 7476b9842c4..226c736032f 100644 --- a/tests/src/test/java/org/sonarqube/tests/analysis/AnalysisEsResilienceTest.java +++ b/tests/src/test/java/org/sonarqube/tests/analysis/AnalysisEsResilienceTest.java @@ -44,6 +44,7 @@ import org.sonarqube.ws.QualityProfiles.CreateWsResponse.QualityProfile; import org.sonarqube.ws.WsCe; import org.sonarqube.ws.WsProjects; import org.sonarqube.ws.WsUsers.CreateWsResponse.User; +import org.sonarqube.ws.client.ce.TaskWsRequest; import org.sonarqube.ws.client.component.SuggestionsWsRequest; import org.sonarqube.ws.client.issue.SearchWsRequest; import util.ItUtils; @@ -157,8 +158,12 @@ public class AnalysisEsResilienceTest { String taskUuid = executeAnalysis(projectKey, organization, orgAdministrator, "analysis/resilience/resilience-purge", "2000-01-02"); // The task has failed - WsCe.Task task = tester.wsClient().ce().task(taskUuid).getTask(); + TaskWsRequest request = TaskWsRequest.newBuilder(taskUuid).withErrorStacktrace().build(); + WsCe.Task task = tester.wsClient().ce().task(request).getTask(); assertThat(task.getStatus()).isEqualTo(WsCe.TaskStatus.FAILED); + assertThat(task.getErrorMessage()).contains("Unrecoverable indexation failures"); + assertThat(task.getErrorStacktrace()) + .contains("Caused by: java.lang.IllegalStateException: Unrecoverable indexation failures"); // The issue must be present with status CLOSED in database assertThat(searchFile(fileKey, organization)).isNotEmpty();