From ff27a40ea8c6fb44c5459c913038cfdae20b55d1 Mon Sep 17 00:00:00 2001 From: FrancescoFioraEst Date: Thu, 14 Aug 2025 11:41:13 +0100 Subject: [PATCH] Fix automatic sync up support in ACM-intermediary Issue-ID: POLICY-5419 Change-Id: I2c73f621f7f398ddda763c545b4da7967f9eb957 Signed-off-by: FrancescoFioraEst --- .../intermediary/handler/AcDefinitionHandler.java | 15 +++++++++++++ .../handler/AcDefinitionHandlerTest.java | 26 ++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AcDefinitionHandler.java b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AcDefinitionHandler.java index d1ded25d6..e0f8cd317 100644 --- a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AcDefinitionHandler.java +++ b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AcDefinitionHandler.java @@ -135,6 +135,8 @@ public class AcDefinitionHandler { cacheProvider.addElementDefinition(participantSyncMsg.getCompositionId(), list, participantSyncMsg.getRevisionIdComposition()); } + } else if (participantSyncMsg.isRestarting()) { + checkComposition(participantSyncMsg); } for (var automationcomposition : participantSyncMsg.getAutomationcompositionList()) { @@ -148,6 +150,19 @@ public class AcDefinitionHandler { } } + private void checkComposition(ParticipantSync participantSyncMsg) { + // edge case scenario in migration whit remove/add elements, + // when composition or target composition doesn't contain elements from this participant + for (var msg : cacheProvider.getMessagesOnHold().values()) { + if (participantSyncMsg.getCompositionId().equals(msg.getCompositionTargetId())) { + msg.setCompositionTargetId(null); + } + if (participantSyncMsg.getCompositionId().equals(msg.getCompositionId())) { + msg.setCompositionId(null); + } + } + } + private void deleteScenario(ParticipantSync participantSyncMsg) { if (AcTypeState.COMMISSIONED.equals(participantSyncMsg.getState())) { cacheProvider.removeElementDefinition(participantSyncMsg.getCompositionId()); diff --git a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AcDefinitionHandlerTest.java b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AcDefinitionHandlerTest.java index 64883e665..1e47a0bb1 100644 --- a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AcDefinitionHandlerTest.java +++ b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AcDefinitionHandlerTest.java @@ -33,6 +33,7 @@ import org.junit.jupiter.api.Test; import org.onap.policy.clamp.acm.participant.intermediary.api.CompositionDto; import org.onap.policy.clamp.acm.participant.intermediary.comm.ParticipantMessagePublisher; import org.onap.policy.clamp.acm.participant.intermediary.handler.cache.AcDefinition; +import org.onap.policy.clamp.acm.participant.intermediary.handler.cache.AutomationCompositionMsg; import org.onap.policy.clamp.acm.participant.intermediary.handler.cache.CacheProvider; import org.onap.policy.clamp.acm.participant.intermediary.main.parameters.CommonTestData; import org.onap.policy.clamp.models.acm.concepts.AcTypeState; @@ -161,4 +162,29 @@ class AcDefinitionHandlerTest { verify(cacheProvider).removeElementDefinition(participantSyncMsg.getCompositionId()); verify(cacheProvider).removeAutomationComposition(restartAc.getAutomationCompositionId()); } + + @Test + void syncDeleteInMigrationTest() { + var participantSyncMsg = new ParticipantSync(); + participantSyncMsg.setState(AcTypeState.PRIMED); + participantSyncMsg.setRestarting(true); + var compositionId = UUID.randomUUID(); + participantSyncMsg.setCompositionId(compositionId); + + AutomationCompositionMsg acMsgComposition = mock(AutomationCompositionMsg.class); + when(acMsgComposition.getCompositionId()).thenReturn(compositionId); + + AutomationCompositionMsg acMsgCompositionTarget = mock(AutomationCompositionMsg.class); + acMsgCompositionTarget.setCompositionId(UUID.randomUUID()); + when(acMsgCompositionTarget.getCompositionTargetId()).thenReturn(compositionId); + + var cacheProvider = mock(CacheProvider.class); + when(cacheProvider.getMessagesOnHold()) + .thenReturn(Map.of(UUID.randomUUID(), acMsgComposition, UUID.randomUUID(), acMsgCompositionTarget)); + var ach = new AcDefinitionHandler(cacheProvider, mock(ParticipantMessagePublisher.class), + mock(ThreadHandler.class)); + ach.handleParticipantSync(participantSyncMsg); + verify(acMsgComposition).setCompositionId(null); + verify(acMsgCompositionTarget).setCompositionTargetId(null); + } } -- 2.16.6