From fc642e82d21ba6798c9b0e085872e0bb2bf9f53e Mon Sep 17 00:00:00 2001 From: Viktor Seifert Date: Wed, 19 Apr 2023 18:10:51 +0200 Subject: [PATCH] RED-6467: Added more debugging output --- .../service/DossierTemplateImportService.java | 31 ++++++++++++++++++- .../persistence/EntryPersistenceService.java | 10 ++---- .../utils/TransactionDebugPrinter.java | 21 +++++++++++++ 3 files changed, 53 insertions(+), 9 deletions(-) create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/TransactionDebugPrinter.java diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java index 0597393f4..24ddc8694 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java @@ -58,6 +58,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository; import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings; import com.iqser.red.service.persistence.management.v1.processor.utils.FileUtils; +import com.iqser.red.service.persistence.management.v1.processor.utils.TransactionDebugPrinter; import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext; import com.iqser.red.service.persistence.service.v1.api.shared.model.WatermarkModel; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DossierAttributeConfig; @@ -111,7 +112,12 @@ public class DossierTemplateImportService { @Transactional public String importDossierTemplate(ImportDossierTemplateRequest request) { + TransactionDebugPrinter.printTransactionRollbackStatus(log, "Starting dossier template import"); + ImportTemplateResult archiveResult = this.handleArchive(request); + + TransactionDebugPrinter.printTransactionRollbackStatus(log, "Extracted dossier template archive"); + return this.importDossierTemplate(archiveResult); } @@ -288,12 +294,15 @@ public class DossierTemplateImportService { long start = System.currentTimeMillis(); String dossierTemplateId; var dossierTemplateMeta = request.getDossierTemplate(); + DossierTemplateEntity existingDossierTemplate = null; if (request.getDossierTemplateId() != null && request.isUpdateExistingTemplate()) { var dossierTemplateOptional = dossierTemplateRepository.findByIdAndNotDeleted(request.getDossierTemplateId()); existingDossierTemplate = dossierTemplateOptional.orElse(null); } + if (existingDossierTemplate != null) { + TransactionDebugPrinter.printTransactionRollbackStatus(log, "Existing dossier found, importing into it"); dossierTemplateId = existingDossierTemplate.getId(); // override the existing dossier template updateDossierTemplateMeta(existingDossierTemplate, dossierTemplateMeta, request.getUserId()); @@ -303,9 +312,13 @@ public class DossierTemplateImportService { existingDossierTemplate.setDossierTemplateStatus(DossierTemplateStatus.valueOf(dossierTemplatePersistenceService.computeDossierTemplateStatus(existingDossierTemplate) .name())); + TransactionDebugPrinter.printTransactionRollbackStatus(log, "Importing colors"); + // set colors this.setColors(dossierTemplateId, request.getColors()); + TransactionDebugPrinter.printTransactionRollbackStatus(log, "Importing watermarks"); + // set watermarks if (CollectionUtils.isNotEmpty(request.getWatermarks())) { Set toSetWatermarks = request.getWatermarks().stream().map(WatermarkModel::getName).filter(Objects::nonNull).collect(Collectors.toSet()); @@ -327,6 +340,8 @@ public class DossierTemplateImportService { configsToRemove.forEach(watermark -> watermarkService.deleteWatermark(watermark.getId())); } + TransactionDebugPrinter.printTransactionRollbackStatus(log, "Importing dossier status"); + // dossier status if (CollectionUtils.isNotEmpty(request.getDossierStatusInfos())) { this.updateDossierStates(request, dossierTemplateId); @@ -335,6 +350,8 @@ public class DossierTemplateImportService { currentStates.forEach(state -> dossierStatusPersistenceService.deleteDossierStatus(state.getId(), null)); } + TransactionDebugPrinter.printTransactionRollbackStatus(log, "Importing dossier attributes"); + // update dossier attributes if (CollectionUtils.isNotEmpty(request.getDossierAttributesConfigs())) { this.updateDossierAttributes(request, dossierTemplateId); @@ -343,6 +360,8 @@ public class DossierTemplateImportService { currentConfigs.forEach(da -> dossierAttributeConfigPersistenceService.deleteDossierAttribute(da.getId())); } + TransactionDebugPrinter.printTransactionRollbackStatus(log, "Importing file attributes"); + //update file attributes if (CollectionUtils.isNotEmpty(request.getFileAttributesConfigs())) { this.updateFileAttributes(request, dossierTemplateId); @@ -351,6 +370,8 @@ public class DossierTemplateImportService { currentConfigs.forEach(fa -> fileAttributeConfigPersistenceService.deleteFileAttribute(fa.getId())); } + TransactionDebugPrinter.printTransactionRollbackStatus(log, "Importing types"); + // update the types if (CollectionUtils.isNotEmpty(request.getTypes())) { this.updateTypes(request, dossierTemplateId); @@ -363,6 +384,8 @@ public class DossierTemplateImportService { this.deleteTypes(currentTypes, new HashSet<>()); } + TransactionDebugPrinter.printTransactionRollbackStatus(log, "Importing report templates"); + //set report templates var existingReports = reportTemplatePersistenceService.findByDossierTemplateId(dossierTemplateId); @@ -374,15 +397,20 @@ public class DossierTemplateImportService { reportsUpdated.add(report.getTemplateId()); }); } + + TransactionDebugPrinter.printTransactionRollbackStatus(log, "Delete reports"); + // delete the reports that were not in the import existingReports.forEach(r -> { String storageId = r.getStorageId(); if (!reportsUpdated.contains(r.getTemplateId())) { - storageService.deleteObject(TenantContext.getTenantId(),storageId); + storageService.deleteObject(TenantContext.getTenantId(), storageId); reportTemplatePersistenceService.delete(r.getTemplateId()); } }); + TransactionDebugPrinter.printTransactionRollbackStatus(log, "Importing legal basis"); + // set legal basis if (CollectionUtils.isNotEmpty(request.getLegalBases())) { legalBasisMappingPersistenceService.setLegalBasisMapping(dossierTemplateId, request.getLegalBases()); @@ -395,6 +423,7 @@ public class DossierTemplateImportService { } } else { + TransactionDebugPrinter.printTransactionRollbackStatus(log, "No existing dossier found, importing into new dossier"); // creates new dossier template if (StringUtils.isEmpty(dossierTemplateMeta.getName())) { throw new ConflictException("DossierTemplate name must be set"); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/EntryPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/EntryPersistenceService.java index ac1e6c3ce..aa1281989 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/EntryPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/EntryPersistenceService.java @@ -8,9 +8,6 @@ import javax.persistence.EntityManager; import javax.transaction.Transactional; import org.springframework.stereotype.Service; -import org.springframework.transaction.TransactionStatus; -import org.springframework.transaction.interceptor.TransactionAspectSupport; -import org.springframework.transaction.support.TransactionSynchronizationManager; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.BaseDictionaryEntry; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.DictionaryEntryEntity; @@ -20,6 +17,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.dictionaryentry.EntryRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.dictionaryentry.FalsePositiveEntryRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.dictionaryentry.FalseRecommendationEntryRepository; +import com.iqser.red.service.persistence.management.v1.processor.utils.TransactionDebugPrinter; import com.iqser.red.service.persistence.management.v1.processor.utils.jdbc.JDBCWriteUtils; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType; @@ -109,11 +107,7 @@ public class EntryPersistenceService { var type = typeRepository.getById(typeId); - if (TransactionSynchronizationManager.isActualTransactionActive()) { - TransactionStatus status = TransactionAspectSupport.currentTransactionStatus(); - - log.info("Importing entries for typeEntity: {} type: {} -- transaction has rollback {}", type, dictionaryEntryType, status.isRollbackOnly()); - } + TransactionDebugPrinter.printTransactionRollbackStatus(log, String.format("Importing entries for typeEntity: %s type: %s", typeId, dictionaryEntryType)); switch (dictionaryEntryType) { case ENTRY -> { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/TransactionDebugPrinter.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/TransactionDebugPrinter.java new file mode 100644 index 000000000..395bfc481 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/TransactionDebugPrinter.java @@ -0,0 +1,21 @@ +package com.iqser.red.service.persistence.management.v1.processor.utils; + +import org.springframework.transaction.TransactionStatus; +import org.springframework.transaction.interceptor.TransactionAspectSupport; +import org.springframework.transaction.support.TransactionSynchronizationManager; + +import lombok.experimental.UtilityClass; + +@UtilityClass +public class TransactionDebugPrinter { + + public void printTransactionRollbackStatus(org.slf4j.Logger log, String message) { + + if (TransactionSynchronizationManager.isActualTransactionActive()) { + TransactionStatus status = TransactionAspectSupport.currentTransactionStatus(); + + log.info(message + " -- transaction isRollbackOnly {}", status.isRollbackOnly()); + } + } + +}