RED-6467: Added more debugging output

This commit is contained in:
Viktor Seifert 2023-04-19 18:10:51 +02:00
parent f4c53c722e
commit fc642e82d2
3 changed files with 53 additions and 9 deletions

View File

@ -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.service.persistence.repository.DossierTemplateRepository;
import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings; 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.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.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.WatermarkModel;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DossierAttributeConfig; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DossierAttributeConfig;
@ -111,7 +112,12 @@ public class DossierTemplateImportService {
@Transactional @Transactional
public String importDossierTemplate(ImportDossierTemplateRequest request) { public String importDossierTemplate(ImportDossierTemplateRequest request) {
TransactionDebugPrinter.printTransactionRollbackStatus(log, "Starting dossier template import");
ImportTemplateResult archiveResult = this.handleArchive(request); ImportTemplateResult archiveResult = this.handleArchive(request);
TransactionDebugPrinter.printTransactionRollbackStatus(log, "Extracted dossier template archive");
return this.importDossierTemplate(archiveResult); return this.importDossierTemplate(archiveResult);
} }
@ -288,12 +294,15 @@ public class DossierTemplateImportService {
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
String dossierTemplateId; String dossierTemplateId;
var dossierTemplateMeta = request.getDossierTemplate(); var dossierTemplateMeta = request.getDossierTemplate();
DossierTemplateEntity existingDossierTemplate = null; DossierTemplateEntity existingDossierTemplate = null;
if (request.getDossierTemplateId() != null && request.isUpdateExistingTemplate()) { if (request.getDossierTemplateId() != null && request.isUpdateExistingTemplate()) {
var dossierTemplateOptional = dossierTemplateRepository.findByIdAndNotDeleted(request.getDossierTemplateId()); var dossierTemplateOptional = dossierTemplateRepository.findByIdAndNotDeleted(request.getDossierTemplateId());
existingDossierTemplate = dossierTemplateOptional.orElse(null); existingDossierTemplate = dossierTemplateOptional.orElse(null);
} }
if (existingDossierTemplate != null) { if (existingDossierTemplate != null) {
TransactionDebugPrinter.printTransactionRollbackStatus(log, "Existing dossier found, importing into it");
dossierTemplateId = existingDossierTemplate.getId(); dossierTemplateId = existingDossierTemplate.getId();
// override the existing dossier template // override the existing dossier template
updateDossierTemplateMeta(existingDossierTemplate, dossierTemplateMeta, request.getUserId()); updateDossierTemplateMeta(existingDossierTemplate, dossierTemplateMeta, request.getUserId());
@ -303,9 +312,13 @@ public class DossierTemplateImportService {
existingDossierTemplate.setDossierTemplateStatus(DossierTemplateStatus.valueOf(dossierTemplatePersistenceService.computeDossierTemplateStatus(existingDossierTemplate) existingDossierTemplate.setDossierTemplateStatus(DossierTemplateStatus.valueOf(dossierTemplatePersistenceService.computeDossierTemplateStatus(existingDossierTemplate)
.name())); .name()));
TransactionDebugPrinter.printTransactionRollbackStatus(log, "Importing colors");
// set colors // set colors
this.setColors(dossierTemplateId, request.getColors()); this.setColors(dossierTemplateId, request.getColors());
TransactionDebugPrinter.printTransactionRollbackStatus(log, "Importing watermarks");
// set watermarks // set watermarks
if (CollectionUtils.isNotEmpty(request.getWatermarks())) { if (CollectionUtils.isNotEmpty(request.getWatermarks())) {
Set<String> toSetWatermarks = request.getWatermarks().stream().map(WatermarkModel::getName).filter(Objects::nonNull).collect(Collectors.toSet()); Set<String> 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())); configsToRemove.forEach(watermark -> watermarkService.deleteWatermark(watermark.getId()));
} }
TransactionDebugPrinter.printTransactionRollbackStatus(log, "Importing dossier status");
// dossier status // dossier status
if (CollectionUtils.isNotEmpty(request.getDossierStatusInfos())) { if (CollectionUtils.isNotEmpty(request.getDossierStatusInfos())) {
this.updateDossierStates(request, dossierTemplateId); this.updateDossierStates(request, dossierTemplateId);
@ -335,6 +350,8 @@ public class DossierTemplateImportService {
currentStates.forEach(state -> dossierStatusPersistenceService.deleteDossierStatus(state.getId(), null)); currentStates.forEach(state -> dossierStatusPersistenceService.deleteDossierStatus(state.getId(), null));
} }
TransactionDebugPrinter.printTransactionRollbackStatus(log, "Importing dossier attributes");
// update dossier attributes // update dossier attributes
if (CollectionUtils.isNotEmpty(request.getDossierAttributesConfigs())) { if (CollectionUtils.isNotEmpty(request.getDossierAttributesConfigs())) {
this.updateDossierAttributes(request, dossierTemplateId); this.updateDossierAttributes(request, dossierTemplateId);
@ -343,6 +360,8 @@ public class DossierTemplateImportService {
currentConfigs.forEach(da -> dossierAttributeConfigPersistenceService.deleteDossierAttribute(da.getId())); currentConfigs.forEach(da -> dossierAttributeConfigPersistenceService.deleteDossierAttribute(da.getId()));
} }
TransactionDebugPrinter.printTransactionRollbackStatus(log, "Importing file attributes");
//update file attributes //update file attributes
if (CollectionUtils.isNotEmpty(request.getFileAttributesConfigs())) { if (CollectionUtils.isNotEmpty(request.getFileAttributesConfigs())) {
this.updateFileAttributes(request, dossierTemplateId); this.updateFileAttributes(request, dossierTemplateId);
@ -351,6 +370,8 @@ public class DossierTemplateImportService {
currentConfigs.forEach(fa -> fileAttributeConfigPersistenceService.deleteFileAttribute(fa.getId())); currentConfigs.forEach(fa -> fileAttributeConfigPersistenceService.deleteFileAttribute(fa.getId()));
} }
TransactionDebugPrinter.printTransactionRollbackStatus(log, "Importing types");
// update the types // update the types
if (CollectionUtils.isNotEmpty(request.getTypes())) { if (CollectionUtils.isNotEmpty(request.getTypes())) {
this.updateTypes(request, dossierTemplateId); this.updateTypes(request, dossierTemplateId);
@ -363,6 +384,8 @@ public class DossierTemplateImportService {
this.deleteTypes(currentTypes, new HashSet<>()); this.deleteTypes(currentTypes, new HashSet<>());
} }
TransactionDebugPrinter.printTransactionRollbackStatus(log, "Importing report templates");
//set report templates //set report templates
var existingReports = reportTemplatePersistenceService.findByDossierTemplateId(dossierTemplateId); var existingReports = reportTemplatePersistenceService.findByDossierTemplateId(dossierTemplateId);
@ -374,15 +397,20 @@ public class DossierTemplateImportService {
reportsUpdated.add(report.getTemplateId()); reportsUpdated.add(report.getTemplateId());
}); });
} }
TransactionDebugPrinter.printTransactionRollbackStatus(log, "Delete reports");
// delete the reports that were not in the import // delete the reports that were not in the import
existingReports.forEach(r -> { existingReports.forEach(r -> {
String storageId = r.getStorageId(); String storageId = r.getStorageId();
if (!reportsUpdated.contains(r.getTemplateId())) { if (!reportsUpdated.contains(r.getTemplateId())) {
storageService.deleteObject(TenantContext.getTenantId(),storageId); storageService.deleteObject(TenantContext.getTenantId(), storageId);
reportTemplatePersistenceService.delete(r.getTemplateId()); reportTemplatePersistenceService.delete(r.getTemplateId());
} }
}); });
TransactionDebugPrinter.printTransactionRollbackStatus(log, "Importing legal basis");
// set legal basis // set legal basis
if (CollectionUtils.isNotEmpty(request.getLegalBases())) { if (CollectionUtils.isNotEmpty(request.getLegalBases())) {
legalBasisMappingPersistenceService.setLegalBasisMapping(dossierTemplateId, request.getLegalBases()); legalBasisMappingPersistenceService.setLegalBasisMapping(dossierTemplateId, request.getLegalBases());
@ -395,6 +423,7 @@ public class DossierTemplateImportService {
} }
} else { } else {
TransactionDebugPrinter.printTransactionRollbackStatus(log, "No existing dossier found, importing into new dossier");
// creates new dossier template // creates new dossier template
if (StringUtils.isEmpty(dossierTemplateMeta.getName())) { if (StringUtils.isEmpty(dossierTemplateMeta.getName())) {
throw new ConflictException("DossierTemplate name must be set"); throw new ConflictException("DossierTemplate name must be set");

View File

@ -8,9 +8,6 @@ import javax.persistence.EntityManager;
import javax.transaction.Transactional; import javax.transaction.Transactional;
import org.springframework.stereotype.Service; 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.BaseDictionaryEntry;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.DictionaryEntryEntity; 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.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.FalsePositiveEntryRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.dictionaryentry.FalseRecommendationEntryRepository; 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.management.v1.processor.utils.jdbc.JDBCWriteUtils;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType; 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); var type = typeRepository.getById(typeId);
if (TransactionSynchronizationManager.isActualTransactionActive()) { TransactionDebugPrinter.printTransactionRollbackStatus(log, String.format("Importing entries for typeEntity: %s type: %s", typeId, dictionaryEntryType));
TransactionStatus status = TransactionAspectSupport.currentTransactionStatus();
log.info("Importing entries for typeEntity: {} type: {} -- transaction has rollback {}", type, dictionaryEntryType, status.isRollbackOnly());
}
switch (dictionaryEntryType) { switch (dictionaryEntryType) {
case ENTRY -> { case ENTRY -> {

View File

@ -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());
}
}
}