]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-9762 Add a meaningful error message when purge is failing
authorEric Hartmann <hartmann.eric@gmail.com>
Fri, 8 Sep 2017 08:26:49 +0000 (10:26 +0200)
committerEric Hartmann <hartmann.eric@gmail.Com>
Thu, 14 Sep 2017 16:18:20 +0000 (18:18 +0200)
server/sonar-ce/src/main/java/org/sonar/ce/queue/InternalCeQueueImpl.java
tests/src/test/java/org/sonarqube/tests/analysis/AnalysisEsResilienceTest.java

index 49ae50087dee00ed249a0160cc30dbb42a733144..adb63e13a23c55a0c668551936a03f2007bc379a 100644 (file)
@@ -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);
index 7476b9842c43e9f07e847ac03373e737ee32a411..226c736032feec6222b6e7236fc539718b8c98e9 100644 (file)
@@ -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();