From: FrancescoFioraEst Date: Thu, 14 Aug 2025 10:41:13 +0000 (+0100) Subject: Fix automatic sync up support in ACM-intermediary X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F31%2F141831%2F4;p=policy%2Fclamp.git Fix automatic sync up support in ACM-intermediary Issue-ID: POLICY-5419 Change-Id: I2c73f621f7f398ddda763c545b4da7967f9eb957 Signed-off-by: FrancescoFioraEst --- 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); + } }