RED-7738: Do not catch database execetions that breaks transactions #173

Merged
dominique.eiflaender1 merged 1 commits from RED-7738-bp1 into release/1.363.x 2023-10-10 15:11:09 +02:00
15 changed files with 77 additions and 34 deletions

View File

@ -92,7 +92,7 @@ public class AddRedactionPersistenceService {
@Transactional
public void hardDelete(String fileId, String annotationId) {
manualRedactionRepository.deleteById(new AnnotationEntityId(annotationId, fileId));
manualRedactionRepository.deleteIfPresentById(new AnnotationEntityId(annotationId, fileId));
}

View File

@ -3,6 +3,7 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis
import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.transaction.Transactional;
@ -47,7 +48,7 @@ public class ForceRedactionPersistenceService {
@Transactional
public void hardDelete(String fileId, String annotationId) {
forceRedactionRepository.deleteById(new AnnotationEntityId(annotationId, fileId));
forceRedactionRepository.deleteIfPresentById(new AnnotationEntityId(annotationId, fileId));
}

View File

@ -47,7 +47,7 @@ public class ImageRecategorizationPersistenceService {
@Transactional
public void hardDelete(String fileId, String annotationId) {
imageRecategorizationRepository.deleteById(new AnnotationEntityId(annotationId, fileId));
imageRecategorizationRepository.deleteIfPresentById(new AnnotationEntityId(annotationId, fileId));
}

View File

@ -2,6 +2,7 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis
import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@ -54,7 +55,7 @@ public class LegalBasisChangePersistenceService {
@Transactional
public void hardDelete(String fileId, String annotationId) {
legalBasisChangeRepository.deleteById(new AnnotationEntityId(annotationId, fileId));
legalBasisChangeRepository.deleteIfPresentById(new AnnotationEntityId(annotationId, fileId));
}

View File

@ -61,7 +61,7 @@ public class RemoveRedactionPersistenceService {
@Transactional
public void hardDelete(String fileId, String annotationId) {
removeRedactionRepository.deleteById(new AnnotationEntityId(annotationId, fileId));
removeRedactionRepository.deleteIfPresentById(new AnnotationEntityId(annotationId, fileId));
}

View File

@ -62,7 +62,7 @@ public class ResizeRedactionPersistenceService {
@Transactional
public void hardDelete(String fileId, String annotationId) {
resizeRedactionRepository.deleteById(new AnnotationEntityId(annotationId, fileId));
resizeRedactionRepository.deleteIfPresentById(new AnnotationEntityId(annotationId, fileId));
}

View File

@ -39,4 +39,8 @@ public interface ForceRedactionRepository extends JpaRepository<ManualForceRedac
@Query("update ManualForceRedactionEntity mfr set mfr.processedDate = :processedDate where mfr.id = :annotationEntityId")
void markAsProcessed(AnnotationEntityId annotationEntityId, OffsetDateTime processedDate);
@Modifying
Integer deleteIfPresentById(AnnotationEntityId annotationEntityId);
}

View File

@ -39,4 +39,7 @@ public interface ImageRecategorizationRepository extends JpaRepository<ManualIma
@Query("update ManualImageRecategorizationEntity mir set mir.processedDate = :processedDate where mir.id = :annotationEntityId")
void markAsProcessed(AnnotationEntityId annotationEntityId, OffsetDateTime processedDate);
@Modifying
Integer deleteIfPresentById(AnnotationEntityId annotationEntityId);
}

View File

@ -31,4 +31,7 @@ public interface LegalBasisChangeRepository extends JpaRepository<ManualLegalBas
@Query("select mlbc from ManualLegalBasisChangeEntity mlbc where mlbc.id.fileId = :fileId and (:includeDeletions = true or mlbc.softDeletedTime is null)")
List<ManualLegalBasisChangeEntity> findByFileIdIncludeDeletions(String fileId, boolean includeDeletions);
@Modifying
Integer deleteIfPresentById(AnnotationEntityId annotationEntityId);
}

View File

@ -55,4 +55,7 @@ public interface ManualRedactionRepository extends JpaRepository<ManualRedaction
@Query("update ManualRedactionEntryEntity m set m.processedDate = :processedDate where m.id = :annotationEntityId")
void markAsProcessed(AnnotationEntityId annotationEntityId, OffsetDateTime processedDate);
@Modifying
Integer deleteIfPresentById(AnnotationEntityId annotationEntityId);
}

View File

@ -41,4 +41,7 @@ public interface RemoveRedactionRepository extends JpaRepository<IdRemovalEntity
@Query("update IdRemovalEntity idr set idr.processedDate = :processedDate where idr.id = :annotationEntityId")
void markAsProcessed(AnnotationEntityId annotationEntityId, OffsetDateTime processedDate);
@Modifying
Integer deleteIfPresentById(AnnotationEntityId annotationEntityId);
}

View File

@ -46,4 +46,7 @@ public interface ResizeRedactionRepository extends JpaRepository<ManualResizeRed
@Query("update ManualResizeRedactionEntity mir set mir.processedDate = :processedDate where mir.id = :annotationEntityId")
void markAsProcessed(AnnotationEntityId annotationEntityId, OffsetDateTime processedDate);
@Modifying
Integer deleteIfPresentById(AnnotationEntityId annotationEntityId);
}

View File

@ -82,41 +82,13 @@ public class ManualRedactionProviderService {
public void hardDeleteManualRedactions(String fileId, String annotationId) {
try {
addRedactionPersistenceService.hardDelete(fileId, annotationId);
} catch (EmptyResultDataAccessException e) {
log.info("Ignored silently during deletion: {}", e.getMessage());
}
try {
removeRedactionPersistenceService.hardDelete(fileId, annotationId);
} catch (EmptyResultDataAccessException e) {
log.info("Ignored silently during deletion: {}", e.getMessage());
}
try {
forceRedactionPersistenceService.hardDelete(fileId, annotationId);
} catch (EmptyResultDataAccessException e) {
log.info("Ignored silently during deletion: {}", e.getMessage());
}
try {
recategorizationPersistenceService.hardDelete(fileId, annotationId);
} catch (EmptyResultDataAccessException e) {
log.info("Ignored silently during deletion: {}", e.getMessage());
}
try {
legalBasisChangePersistenceService.hardDelete(fileId, annotationId);
} catch (EmptyResultDataAccessException e) {
log.info("Ignored silently during deletion: {}", e.getMessage());
}
try {
resizeRedactionPersistenceService.hardDelete(fileId, annotationId);
} catch (EmptyResultDataAccessException e) {
log.info("Ignored silently during deletion: {}", e.getMessage());
}
try {
commentPersistenceService.hardDelete(fileId, annotationId);
} catch (EmptyResultDataAccessException e) {
log.info("Ignored silently during deletion: {}", e.getMessage());
}
}

View File

@ -1,6 +1,7 @@
package com.iqser.red.service.peristence.v1.server.integration.tests;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
@ -79,6 +80,52 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
@Autowired
private FileClient fileClient;
@Test
public void testRemoveLocalRedaction(){
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate);
var file = fileTesterAndProvider.testAndProvideFile(dossier);
var type = typeProvider.testAndProvideType(dossierTemplate, null, "manual");
var addRedaction = manualRedactionClient.addAddRedaction(dossier.getId(),
file.getId(),
Collections.singletonList(AddRedactionRequest.builder()
.positions(List.of(Rectangle.builder().topLeftY(1).topLeftX(1).height(1).width(1).build()))
.section("section test")
.addToDictionary(false)
.addToDossierDictionary(false)
.status(AnnotationStatus.REQUESTED)
.typeId(type.getId())
.user("user")
.reason("1")
.value("test")
.legalBasis("1")
.rectangle(true)
.textAfter("Text After")
.textBefore("Text Before")
.sourceId("SourceId")
.build())).iterator().next();
var loadedAddRedaction = manualRedactionClient.getAddRedaction(file.getId(), addRedaction.getAnnotationId());
assertThat(loadedAddRedaction.isRectangle()).isEqualTo(true);
manualRedactionClient.addRemoveRedaction(dossier.getId(), file.getId(), List.of(RemoveRedactionRequest.builder()
.annotationId(addRedaction.getAnnotationId())
.comment("comment")
.status(AnnotationStatus.APPROVED)
.user("test")
.removeFromDictionary(false)
.build()));
// Add should be deleted.
assertThatThrownBy(() -> manualRedactionClient.getAddRedaction(file.getId(), addRedaction.getAnnotationId()))
.isInstanceOf(FeignException.class);
}
@Test
@SneakyThrows
public void testManualRedaction3641() {

View File

@ -9,6 +9,7 @@ import java.util.UUID;
import javax.sql.DataSource;
import com.iqser.red.service.peristence.v1.server.jobs.CustomQuartzConfiguration;
import org.assertj.core.util.Lists;
import org.junit.After;
import org.junit.Before;
@ -94,6 +95,8 @@ import lombok.SneakyThrows;
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, properties = "spring-hibernate-query-utils.n-plus-one-queries-detection.error-level=INFO")
public abstract class AbstractPersistenceServerServiceTest {
@MockBean
private CustomQuartzConfiguration customQuartzConfiguration;
@MockBean
private AmqpAdmin amqpAdmin;
@MockBean