diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/migration/MigrationStarterService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/migration/MigrationStarterService.java index ef0415d79..4d9e41ce6 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/migration/MigrationStarterService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/migration/MigrationStarterService.java @@ -45,15 +45,7 @@ public class MigrationStarterService { tenantRepository.findAll().forEach(tenant -> { - TenantContext.setTenantId(tenant.getTenantId()); - - log.info("Start migration for tentant: " + tenant); - - migrations.sort(Comparator.comparing(Migration::getVersion)); - - for (var migration : migrations) { - migration.run(); - } + runForTenant(tenant.getTenantId()); }); log.info("Migration is finished"); @@ -63,6 +55,23 @@ public class MigrationStarterService { } + public void runForTenant(String tenantId) { + + TenantContext.setTenantId(tenantId); + + seedMigration(); // Needed if tenant is created that is not migrated. + log.info("Start migration for tentant: " + tenantId); + + migrations.sort(Comparator.comparing(Migration::getVersion)); + + for (var migration : migrations) { + migration.run(); + } + + log.info("Migration is finished for tenant: " + tenantId); + } + + private void seedMigration() { if (migrationPersistenceService.getLatestProcessedVersion() == null) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/migration/migrations/ReduceTextFileSizeMigration10.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/migration/migrations/ReduceTextFileSizeMigration10.java index 5873a58c1..e5e67ae21 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/migration/migrations/ReduceTextFileSizeMigration10.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/migration/migrations/ReduceTextFileSizeMigration10.java @@ -1,6 +1,7 @@ package com.iqser.red.service.peristence.v1.server.migration.migrations; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.InputStreamResource; import org.springframework.stereotype.Service; import com.iqser.red.service.peristence.v1.server.migration.Migration; @@ -59,6 +60,25 @@ public class ReduceTextFileSizeMigration10 extends Migration { } }); + log.info("All files are migrated, removing bak files"); + + dossiers.forEach(dossier -> { + if (dossier.getHardDeletedTime() == null) { + var files = fileStatusPersistenceService.getStatusesForDossier(dossier.getId()); + log.info("Start removing bak files of dossier {}", dossier.getId()); + files.forEach(file -> { + if (file.getHardDeletedTime() == null) { + log.info("Start removing bak of file {}", file.getId()); + storageService.deleteObject(StorageIdUtils.getStorageId(dossier.getId(), file.getId(), FileType.TEXT) + ".bak"); + log.info("Finished removing bak of file {}", file.getId()); + } + }); + log.info("Finished removing bak files of dossier {}", dossier.getId()); + } + }); + + log.info("All bak files removed"); + } @@ -66,8 +86,13 @@ public class ReduceTextFileSizeMigration10 extends Migration { public void migrateFile(String dossierId, String fileId) { try { - var text = storageService.readJSONObject(StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT), Text.class); - storageService.storeJSONObject(StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT), text); + + if(!storageService.objectExists(StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT) + ".bak")) { + InputStreamResource textInputStreamResource = storageService.getObject(StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT)); + storageService.storeObject(StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT) + ".bak", textInputStreamResource.getInputStream()); + var text = storageService.readJSONObject(StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT), Text.class); + storageService.storeJSONObject(StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT), text); + } } catch (StorageObjectDoesNotExist e) { log.warn("Text not found for dossier {} and file {}, ignoring....", dossierId, fileId); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java index d15eb2575..a4244386d 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java @@ -19,6 +19,8 @@ import org.springframework.core.io.ResourceLoader; import org.springframework.jdbc.datasource.SingleConnectionDataSource; import org.springframework.stereotype.Service; +import com.iqser.red.service.peristence.v1.server.migration.MigrationStarterService; +import com.iqser.red.service.peristence.v1.server.service.job.AutomaticAnalysisJob; import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.multitenancy.entity.TenantEntity; @@ -53,17 +55,21 @@ public class TenantManagementService { private final LiquibaseProperties liquibaseProperties; private final ResourceLoader resourceLoader; private final TenantRepository tenantRepository; + private final AutomaticAnalysisJob automaticAnalysisJob; + private final MigrationStarterService migrationStarterService; public TenantManagementService(EncryptionDecryptionService encryptionService, @Qualifier("tenantLiquibaseProperties") LiquibaseProperties liquibaseProperties, ResourceLoader resourceLoader, - TenantRepository tenantRepository) { + TenantRepository tenantRepository, AutomaticAnalysisJob automaticAnalysisJob, MigrationStarterService migrationStarterService) { this.encryptionService = encryptionService; this.liquibaseProperties = liquibaseProperties; this.resourceLoader = resourceLoader; this.tenantRepository = tenantRepository; + this.automaticAnalysisJob = automaticAnalysisJob; + this.migrationStarterService = migrationStarterService; } @@ -94,6 +100,17 @@ public class TenantManagementService { .password(encryptedPassword) .build(); tenantRepository.save(tenantEntity); + + try{ + automaticAnalysisJob.setSchedulingStopped(true); + migrationStarterService.runForTenant(tenantRequest.getTenantId()); + automaticAnalysisJob.setSchedulingStopped(false); + } catch (Exception e){ + automaticAnalysisJob.setSchedulingStopped(false); + throw e; + } + + } else { throw ConflictException.withObjectName("tenant"); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/job/AutomaticAnalysisJob.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/job/AutomaticAnalysisJob.java index 11e8d0444..f7bbcea2a 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/job/AutomaticAnalysisJob.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/job/AutomaticAnalysisJob.java @@ -16,6 +16,7 @@ import com.iqser.red.service.persistence.management.v1.processor.utils.multitena import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; import lombok.RequiredArgsConstructor; +import lombok.Setter; import lombok.extern.slf4j.Slf4j; @Slf4j @@ -28,11 +29,14 @@ public class AutomaticAnalysisJob implements Job { private final FileStatusService fileStatusService; private final TenantRepository tenantRepository; + @Setter + private boolean schedulingStopped; + @Override public void execute(JobExecutionContext jobExecutionContext) { - if (fileManagementServiceSettings.isMigrateOnly()) { + if (fileManagementServiceSettings.isMigrateOnly() || schedulingStopped) { log.info("Skipping scheduling during migration"); return; }