diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/MigrationStatusController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/MigrationStatusController.java index 43cbd63d5..3ae5c41e7 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/MigrationStatusController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/MigrationStatusController.java @@ -3,6 +3,7 @@ package com.iqser.red.persistence.service.v1.external.api.impl.controller; import com.iqser.red.service.persistence.management.v1.processor.entity.migration.SaasMigrationStatusEntity; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; +import com.iqser.red.service.persistence.management.v1.processor.migration.SaasMigrationAsyncService; import com.iqser.red.service.persistence.management.v1.processor.migration.SaasMigrationService; import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.SaasMigrationStatusPersistenceService; @@ -34,6 +35,8 @@ public class MigrationStatusController implements MigrationStatusResource { FileStatusService fileStatusService; + SaasMigrationAsyncService saasMigrationAsyncService; + public MigrationStatusResponse migrationStatus() { @@ -93,14 +96,14 @@ public class MigrationStatusController implements MigrationStatusResource { throw new BadRequestException("There are still files processing, please wait until migration has finished to retry!"); } - saasMigrationService.requeueErrorFiles(); + saasMigrationAsyncService.requeueErrorFiles(); return ResponseEntity.ok().build(); } public void retryZipFiles(){ - saasMigrationService.restartZipFiles(); + saasMigrationAsyncService.restartZipFiles(); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasMigrationAsyncService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasMigrationAsyncService.java new file mode 100644 index 000000000..d59dcf389 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasMigrationAsyncService.java @@ -0,0 +1,45 @@ +package com.iqser.red.service.persistence.management.v1.processor.migration; + +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import com.iqser.red.service.persistence.management.v1.processor.service.job.AutomaticAnalysisJob; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.SaasMigrationStatusPersistenceService; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.SaasMigrationStatus; +import com.knecon.fforesight.tenantcommons.TenantContext; + +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import lombok.experimental.FieldDefaults; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service +@RequiredArgsConstructor +@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) +public class SaasMigrationAsyncService { + + AutomaticAnalysisJob automaticAnalysisJob; + SaasMigrationStatusPersistenceService saasMigrationStatusPersistenceService; + UncompressedFilesMigrationService uncompressedFilesMigrationService; + SaasMigrationService saasMigrationService; + + @Async + public void requeueErrorFiles() { + + automaticAnalysisJob.stopForTenant(TenantContext.getTenantId()); + saasMigrationStatusPersistenceService.findAllByStatus(SaasMigrationStatus.ERROR) + .forEach(migrationStatus -> saasMigrationService.startMigrationForFile(migrationStatus.getDossierId(), migrationStatus.getFileId())); + + } + + + @Async + public void restartZipFiles(){ + log.info("Starting uncompressed files migration ..."); + uncompressedFilesMigrationService.migrateUncompressedFiles(TenantContext.getTenantId()); + log.info("Finished uncompressed files migration ..."); + } + + +} diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasMigrationService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasMigrationService.java index 78b238fcd..36e95f3a7 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasMigrationService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasMigrationService.java @@ -9,7 +9,6 @@ import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId; @@ -99,8 +98,8 @@ public class SaasMigrationService implements TenantSyncService { var dossier = dossierService.getDossierById(file.getDossierId()); - if (dossier.getHardDeletedTime() != null){ - if (fileStatusPersistenceService.getStatus(file.getFileId()).getHardDeletedTime() != null){ + if (dossier.getHardDeletedTime() != null) { + if (fileStatusPersistenceService.getStatus(file.getFileId()).getHardDeletedTime() != null) { saasMigrationStatusPersistenceService.updateStatus(file.getFileId(), SaasMigrationStatus.FINISHED); return; } else { @@ -109,7 +108,7 @@ public class SaasMigrationService implements TenantSyncService { return; } } - if (fileStatusPersistenceService.getStatus(file.getFileId()).getHardDeletedTime() != null){ + if (fileStatusPersistenceService.getStatus(file.getFileId()).getHardDeletedTime() != null) { saasMigrationStatusPersistenceService.updateStatus(file.getFileId(), SaasMigrationStatus.FINISHED); return; } @@ -141,8 +140,8 @@ public class SaasMigrationService implements TenantSyncService { var dossier = dossierService.getDossierById(dossierId); - if (dossier.getHardDeletedTime() != null){ - if (fileStatusPersistenceService.getStatus(fileId).getHardDeletedTime() != null){ + if (dossier.getHardDeletedTime() != null) { + if (fileStatusPersistenceService.getStatus(fileId).getHardDeletedTime() != null) { saasMigrationStatusPersistenceService.updateStatus(fileId, SaasMigrationStatus.FINISHED); return; } else { @@ -151,7 +150,7 @@ public class SaasMigrationService implements TenantSyncService { return; } } - if (fileStatusPersistenceService.getStatus(fileId).getHardDeletedTime() != null){ + if (fileStatusPersistenceService.getStatus(fileId).getHardDeletedTime() != null) { saasMigrationStatusPersistenceService.updateStatus(fileId, SaasMigrationStatus.FINISHED); return; } @@ -163,24 +162,6 @@ public class SaasMigrationService implements TenantSyncService { } - @Async - public void requeueErrorFiles() { - - automaticAnalysisJob.stopForTenant(TenantContext.getTenantId()); - saasMigrationStatusPersistenceService.findAllByStatus(SaasMigrationStatus.ERROR) - .forEach(migrationStatus -> startMigrationForFile(migrationStatus.getDossierId(), migrationStatus.getFileId())); - - } - - - @Async - public void restartZipFiles(){ - log.info("Starting uncompressed files migration ..."); - uncompressedFilesMigrationService.migrateUncompressedFiles(TenantContext.getTenantId()); - log.info("Finished uncompressed files migration ..."); - } - - public void handleLayoutParsingFinished(String dossierId, String fileId) { if (!layoutParsingFilesExist(dossierId, fileId)) { @@ -201,14 +182,14 @@ public class SaasMigrationService implements TenantSyncService { String dossierTemplateId = dossierService.getDossierById(dossierId).getDossierTemplateId(); rabbitTemplate.convertAndSend(MIGRATION_QUEUE, - MigrationRequest.builder() - .dossierTemplateId(dossierTemplateId) - .dossierId(dossierId) - .fileId(fileId) - .fileIsApproved(fileStatusPersistenceService.getStatus(fileId).getWorkflowStatus().equals(WorkflowStatus.APPROVED)) - .manualRedactions(manualRedactionProviderService.getManualRedactions(fileId, ManualChangesQueryOptions.allWithoutDeleted())) - .entitiesWithComments(commentService.getCommentCounts(fileId).keySet()) - .build()); + MigrationRequest.builder() + .dossierTemplateId(dossierTemplateId) + .dossierId(dossierId) + .fileId(fileId) + .fileIsApproved(fileStatusPersistenceService.getStatus(fileId).getWorkflowStatus().equals(WorkflowStatus.APPROVED)) + .manualRedactions(manualRedactionProviderService.getManualRedactions(fileId, ManualChangesQueryOptions.allWithoutDeleted())) + .entitiesWithComments(commentService.getCommentCounts(fileId).keySet()) + .build()); } catch (Exception e) { log.error("Queuing of entityLog migration failed with {}", e.getMessage()); saasMigrationStatusPersistenceService.updateErrorStatus(fileId, String.format("Queuing of entityLog migration failed with %s", e.getMessage())); @@ -220,9 +201,9 @@ public class SaasMigrationService implements TenantSyncService { private boolean layoutParsingFilesExist(String dossierId, String fileId) { return storageService.objectExists(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.DOCUMENT_STRUCTURE)) // - && storageService.objectExists(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.DOCUMENT_TEXT)) // - && storageService.objectExists(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.DOCUMENT_PAGES)) // - && storageService.objectExists(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.DOCUMENT_POSITION)); + && storageService.objectExists(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.DOCUMENT_TEXT)) // + && storageService.objectExists(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.DOCUMENT_PAGES)) // + && storageService.objectExists(TenantContext.getTenantId(), StorageIdUtils.getStorageId(dossierId, fileId, FileType.DOCUMENT_POSITION)); } @@ -329,10 +310,10 @@ public class SaasMigrationService implements TenantSyncService { updateAnnotationIds(fileId, idMapping); } catch (Exception e) { String message = String.format("Error during annotation id migration for tenant %s dossier %s and file %s, cause %s", - TenantContext.getTenantId(), - dossierId, - fileId, - e.getMessage()); + TenantContext.getTenantId(), + dossierId, + fileId, + e.getMessage()); saasMigrationStatusPersistenceService.updateErrorStatus(fileId, message); log.error(message); throw e; diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java index 288788ee9..523a2e2b7 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java @@ -57,7 +57,7 @@ import io.micrometer.observation.aop.ObservedAspect; import lombok.extern.slf4j.Slf4j; @Slf4j -@EnableAsync(proxyTargetClass=true) +@EnableAsync @EnableRetry @EnableScheduling @EnableCaching