cleanup and harden document and ingest service
This commit is contained in:
@@ -32,9 +32,8 @@ final class IngestOrchestrator
|
||||
$job = null;
|
||||
|
||||
try {
|
||||
$status = $version->getIngestStatus();
|
||||
|
||||
if ($status === DocumentVersion::INGEST_INDEXED) {
|
||||
if ($version->getIngestStatus() === DocumentVersion::INGEST_INDEXED) {
|
||||
throw new \RuntimeException('DocumentVersion already indexed.');
|
||||
}
|
||||
|
||||
@@ -45,18 +44,13 @@ final class IngestOrchestrator
|
||||
$version->getId(),
|
||||
);
|
||||
|
||||
$version->setIngestStatus(DocumentVersion::INGEST_RUNNING);
|
||||
$this->em->flush();
|
||||
|
||||
if ($dryRun) {
|
||||
usleep(200000);
|
||||
} else {
|
||||
$this->ingestFlow->ingestDocumentVersion($version);
|
||||
}
|
||||
|
||||
$version->setIngestStatus(DocumentVersion::INGEST_INDEXED);
|
||||
$this->jobService->markCompleted($job);
|
||||
$this->em->flush();
|
||||
|
||||
return $job;
|
||||
|
||||
@@ -66,9 +60,6 @@ final class IngestOrchestrator
|
||||
$this->jobService->markFailed($job, $e->getMessage());
|
||||
}
|
||||
|
||||
$version->setIngestStatus(DocumentVersion::INGEST_FAILED);
|
||||
$this->em->flush();
|
||||
|
||||
throw $e;
|
||||
|
||||
} finally {
|
||||
@@ -84,6 +75,7 @@ final class IngestOrchestrator
|
||||
|
||||
try {
|
||||
|
||||
// Idempotenz
|
||||
if (in_array($job->getStatus(), [
|
||||
IngestJob::STATUS_COMPLETED,
|
||||
IngestJob::STATUS_FAILED,
|
||||
@@ -111,7 +103,7 @@ final class IngestOrchestrator
|
||||
}
|
||||
|
||||
// ---------------------------
|
||||
// DOCUMENT DELETE (NEU)
|
||||
// DOCUMENT DELETE
|
||||
// ---------------------------
|
||||
if ($job->getType() === IngestJob::TYPE_DOCUMENT_DELETE) {
|
||||
|
||||
@@ -158,56 +150,21 @@ final class IngestOrchestrator
|
||||
throw new \RuntimeException('DocumentVersion not found.');
|
||||
}
|
||||
|
||||
$status = $version->getIngestStatus();
|
||||
|
||||
if (!$isActivateJob) {
|
||||
if ($status === DocumentVersion::INGEST_INDEXED) {
|
||||
throw new \RuntimeException('DocumentVersion already indexed.');
|
||||
}
|
||||
if (!$isActivateJob && $version->getIngestStatus() === DocumentVersion::INGEST_INDEXED) {
|
||||
throw new \RuntimeException('DocumentVersion already indexed.');
|
||||
}
|
||||
|
||||
if (!$isActivateJob) {
|
||||
if (!in_array($status, [
|
||||
DocumentVersion::INGEST_PENDING,
|
||||
DocumentVersion::INGEST_FAILED,
|
||||
DocumentVersion::INGEST_RUNNING,
|
||||
], true)) {
|
||||
throw new \RuntimeException(sprintf(
|
||||
'Ingest not allowed for status "%s".',
|
||||
$status
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
$version->setIngestStatus(DocumentVersion::INGEST_RUNNING);
|
||||
$this->em->flush();
|
||||
|
||||
if ($dryRun) {
|
||||
usleep(200000);
|
||||
} else {
|
||||
$this->ingestFlow->ingestDocumentVersion($version);
|
||||
}
|
||||
|
||||
$version->setIngestStatus(DocumentVersion::INGEST_INDEXED);
|
||||
$this->jobService->markCompleted($job);
|
||||
$this->em->flush();
|
||||
|
||||
} catch (\Throwable $e) {
|
||||
|
||||
$this->jobService->markFailed($job, $e->getMessage());
|
||||
|
||||
$versionId = $job->getDocumentVersionId();
|
||||
if ($versionId instanceof Uuid) {
|
||||
$version = $this->em
|
||||
->getRepository(DocumentVersion::class)
|
||||
->find($versionId);
|
||||
|
||||
if ($version) {
|
||||
$version->setIngestStatus(DocumentVersion::INGEST_FAILED);
|
||||
$this->em->flush();
|
||||
}
|
||||
}
|
||||
|
||||
throw $e;
|
||||
|
||||
} finally {
|
||||
@@ -224,6 +181,7 @@ final class IngestOrchestrator
|
||||
$job = null;
|
||||
|
||||
try {
|
||||
|
||||
$job = $this->jobService->startJob(
|
||||
IngestJob::TYPE_GLOBAL_REINDEX,
|
||||
$user
|
||||
|
||||
Reference in New Issue
Block a user