From 80cfa6843124bc7dee43257be2c383b993d5340b Mon Sep 17 00:00:00 2001 From: deiflaender Date: Fri, 23 Jun 2023 13:02:47 +0200 Subject: [PATCH] RED-6543: Fixed file attribute scheduling race condition --- .../service/persistence/FileStatusPersistenceService.java | 2 +- .../v1/server/integration/tests/FileAttributeTest.java | 4 ++++ .../service/v1/api/shared/model/FileAttribute.java | 7 +++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java index 5ae275dbd..5557c015a 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java @@ -258,8 +258,8 @@ public class FileStatusPersistenceService { var fileAttributeEntities = convertFileAttributes(dossierId, file, fileAttributes); fileAttributesRepository.saveAllAndFlush(fileAttributeEntities); - fileRepository.updateLastAttributeChangeDate(fileId, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + file.setLastFileAttributeChange(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); }, () -> { throw new NotFoundException("Unknown file=" + fileId); }); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java index 819fb23fc..88627f823 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java @@ -124,8 +124,12 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { assertThat(loadedConfigs.size()).isEqualTo(4); assertThat(updated.getLabel()).isEqualTo("Test Attribute Update"); + assertThat(fileClient.getFileStatus(dossier.getId(), file.getId()).getLastFileAttributeChange()).isNull(); + fileAttributeClient.setFileAttributes(dossier.getId(), file.getId(), new FileAttributes(Map.of(updated.getId(), "Lorem Ipsum"))); + assertThat(fileClient.getFileStatus(dossier.getId(), file.getId()).getLastFileAttributeChange()).isNotNull(); + Map fileAttributes = fileClient.getFileStatus(dossier.getId(), file.getId()).getFileAttributes().getAttributeIdToValue(); assertThat(fileAttributes.size()).isEqualTo(1); assertThat(fileAttributes.entrySet().iterator().next().getValue()).isEqualTo("Lorem Ipsum"); diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/FileAttribute.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/FileAttribute.java index 871a078f8..1988021f3 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/FileAttribute.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/FileAttribute.java @@ -1,5 +1,7 @@ package com.iqser.red.service.persistence.service.v1.api.shared.model; +import java.util.Arrays; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -16,5 +18,10 @@ public class FileAttribute { private String placeholder; private String value; + + public boolean valueEqualsAnyOf(String... values){ + + return Arrays.asList(values).contains(value); + } }