SonarSource/sonarqube · error · IllegalStateException
Failed to split report for task ${uuid}
Error message
Failed to split report for task ${uuid} What it means
ReportSubmitter.splitFile chops the report temp file into chunks of reportPartMaxSizeBytes and writes each part to the database through a FileChannel. Any IOException during reading/writing parts is wrapped in this IllegalStateException including the CE task uuid. It means the report could not be sliced for Compute Engine processing.
Source
Thrown at server/sonar-webserver-webapi/src/main/java/org/sonar/server/ce/queue/ReportSubmitter.java:308
int position = 0;
LOGGER.debug("Splitting report file {} of size {}", bigFile.toPath(), sourceSize);
try (RandomAccessFile sourceFile = new RandomAccessFile(bigFile, "r");
FileChannel sourceChannel = sourceFile.getChannel()) {
final long numSplits = sourceSize / reportPartMaxSizeBytes;
final long remainingBytes = sourceSize % reportPartMaxSizeBytes;
LOGGER.debug("Report file {} will be split in {} parts", bigFile.toPath(), numSplits + (remainingBytes > 0 ? 1 : 0));
for (; position < numSplits; position++) {
//write multipart files.
writePartToDb(dbSession, submit, reportPartMaxSizeBytes, position, sourceChannel, reportPartMaxSizeBytes);
}
if (remainingBytes > 0) {
writePartToDb(dbSession, submit, remainingBytes, position, sourceChannel, reportPartMaxSizeBytes);
return position + 1;
}
} catch (IOException e) {
throw new IllegalStateException("Failed to split report for task " + submit.getUuid(), e);
}
return position;
}
private void writePartToDb(DbSession dbSession, CeTaskSubmit.Builder submit, long byteSize, long partIndex, FileChannel sourceChannel, long reportPartMaxSizeBytes)
throws IOException {
File file = tempFolder.newFile();
try {
writePart(byteSize, partIndex, sourceChannel, reportPartMaxSizeBytes, file);
saveFileOnDb(dbSession, submit, partIndex, file);
} finally {
deleteTempFile(file);
}
}
private static void writePart(long byteSize, long partIndex, FileChannel sourceChannel, long reportPartMaxSizeBytes, File file) throws IOException {
try (RandomAccessFile toFile = new RandomAccessFile(file, "rw");View on GitHub (pinned to 184c821202)
Solutions
- Verify free disk space and temp-file integrity during large report uploads
- Check CE and web server logs for the wrapped IOException cause
- Increase/adjust sonar.ce.task report size settings if parts are exceeding limits
- Retry the analysis; if DB-related, verify database connectivity and ce_task_input table health
Defensive patterns
Strategy: retry
Validate before calling
if (Files.size(tempFile) > maxReportSize) splitOrTrimBeforeSubmit();
Try / catch
try { submit(); } catch (ServerException e) if (e.status == 500 && e.message.startsWith("Failed to split report")) { retryWithBackoff(); } Prevention
- Keep report sizes within configured limits
- Monitor disk and DB health for CE nodes
- Retry transient storage failures with backoff
When it happens
Trigger: IOException while reading the source channel (disk error, truncated temp file) or while writing parts inside writePartToDb during the split loop of a large report.
Common situations: Reports larger than configured max size hitting storage failures; disk full mid-split; temp file corrupted; DB connection dropped mid-part-write surfacing as IO failure in the split path.
Understand the failure class
Background: "failed to read file", EACCES, ENOENT and "could not read <path>" errors: when a program can't read a file from disk — this error's family across 49 libraries.
Related errors
- Could not save scanner report to temp file
- Could not check the size of the report temp file
- Could not save report ${uuid} part ${partNumber} file to dat
- %s for request [%s]: [%s]
- Analysis report %s part %s is missing in database
AI-assisted analysis of SonarSource/sonarqube@184c821202 (2026-09-09).
Data as JSON: /api/errors/b845ba9d074d1e00.
Report an issue: GitHub.