processedFileRepository->findByUid($processedFileId); try { $this->validateProcessedFile($processedFile); $hadToWaitForLock = $this->locker->acquireLock(self::class, (string)$processedFileId); if ($hadToWaitForLock) { // Fetch the processed file again, as it might have been processed by // another process while waiting for the lock /** @var ProcessedFile $processedFile */ $processedFile = $this->processedFileRepository->findByUid($processedFileId); $this->validateProcessedFile($processedFile); } $this->context->setAspect('fileProcessing', new FileProcessingAspect(false)); $processedFile = $processedFile->getOriginalFile()->process( $processedFile->getTaskIdentifier(), $processedFile->getProcessingConfiguration() ); $this->validateProcessedFile($processedFile); } catch (FileAlreadyProcessedException $e) { $processedFile = $e->getProcessedFile(); } finally { $this->locker->releaseLock(self::class); } return $processedFile; } /** * Check whether a processed file was already processed * * @throws FileAlreadyProcessedException */ private function validateProcessedFile(ProcessedFile $processedFile): void { if ($processedFile->isProcessed()) { throw new FileAlreadyProcessedException($processedFile, 1599395651); } } }