size race condition fix

This commit is contained in:
Anthony Stirling 2025-11-10 08:57:52 +00:00
parent b4e33002b6
commit a7f17947df
2 changed files with 8 additions and 1 deletions

View File

@ -41,7 +41,7 @@ public class CustomPDFDocumentFactory {
// Memory thresholds and limits
private static final long SMALL_FILE_THRESHOLD = 10 * 1024 * 1024; // 10 MB
public static final long SMALL_FILE_THRESHOLD = 10 * 1024 * 1024; // 10 MB
// Files smaller than this threshold are loaded entirely in memory for better performance.
// These files use IOUtils.createMemoryOnlyStreamCache() which keeps all document data in RAM.
// No temp files are created for document data, reducing I/O operations but consuming more

View File

@ -309,6 +309,13 @@ public class PdfJsonConversionService {
byte[] cachedPdfBytes = null;
// Pre-read file bytes before loading PDDocument, since loading may delete the file
// (small files get loaded into memory and original is deleted)
// This is needed for lazy image caching where we need the bytes later
if (Files.size(workingPath) <= CustomPDFDocumentFactory.SMALL_FILE_THRESHOLD) {
cachedPdfBytes = Files.readAllBytes(workingPath);
}
try (PDDocument document = pdfDocumentFactory.load(workingPath, true)) {
int totalPages = document.getNumberOfPages();
// Only use lazy images for real async jobs where client can access the cache