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
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);
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;
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();