From f68190af4f0251934734841352a77758ba53653e Mon Sep 17 00:00:00 2001 From: "a.sreekumar" Date: Thu, 23 Jul 2020 10:36:32 +0100 Subject: APEX changes to support policy disable/enable and some improvements 1) Do not stop all the marshallers/unmarshallers while updating the engine. Stop and remove only those that are part of the policies that are undeployed. 2) Do not reinitilaize any marshaller/unmarshaller that is already initilaized as part of the policies which were already deployed. Initialize only the ones as part of any newly deployed policy. 3) EngineParameters could be different in different policies. Aggregate these parameters and make it available in the engine for any running policy. 4) Enable support for running policies with same model and different configurations. Change-Id: If74807a0515a741ef4e53bd0a93e43b05872f6b5 Issue-ID: POLICY-2536 Signed-off-by: a.sreekumar --- .../model/policymodel/handling/PolicyModelMerger.java | 16 ++++------------ .../policymodel/handling/PolicyModelMergerTest.java | 12 +++++++++--- 2 files changed, 13 insertions(+), 15 deletions(-) (limited to 'model') diff --git a/model/policy-model/src/main/java/org/onap/policy/apex/model/policymodel/handling/PolicyModelMerger.java b/model/policy-model/src/main/java/org/onap/policy/apex/model/policymodel/handling/PolicyModelMerger.java index 37c3b2368..90d5b7fd2 100644 --- a/model/policy-model/src/main/java/org/onap/policy/apex/model/policymodel/handling/PolicyModelMerger.java +++ b/model/policy-model/src/main/java/org/onap/policy/apex/model/policymodel/handling/PolicyModelMerger.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. * Modifications Copyright (C) 2019 Nordix Foundation. + * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -115,9 +116,9 @@ public final class PolicyModelMerger { if (failOnDuplicateKeys) { StringBuilder errorMessage = new StringBuilder(); - checkForDuplicateContextItem(mergedSchemasMap, copyOverSchemasMap, errorMessage, "schema"); + checkForDuplicateItem(mergedSchemasMap, copyOverSchemasMap, errorMessage, "schema"); checkForDuplicateItem(mergedEventMap, copyOverEventMap, errorMessage, "event"); - checkForDuplicateContextItem(mergedAlbumsMap, copyOverAlbumsMap, errorMessage, "album"); + checkForDuplicateItem(mergedAlbumsMap, copyOverAlbumsMap, errorMessage, "album"); checkForDuplicateItem(mergedTaskMap, copyOverTaskMap, errorMessage, "task"); checkForDuplicateItem(mergedPolicyMap, copyOverPolicyMap, errorMessage, "policy"); if (errorMessage.length() > 0) { @@ -145,19 +146,10 @@ public final class PolicyModelMerger { } private static void checkForDuplicateItem(Map mergedItemsMap, - Map copyOverItemsMap, StringBuilder errorMessage, String itemType) { - for (AxArtifactKey key : copyOverItemsMap.keySet()) { - if (mergedItemsMap.containsKey(key)) { - errorMessage.append("\n Duplicate " + itemType + " found - ").append(key.getId()); - } - } - } - - private static void checkForDuplicateContextItem(Map mergedItemsMap, Map copyOverItemsMap, StringBuilder errorMessage, String itemType) { for (Entry entry : copyOverItemsMap.entrySet()) { V item = mergedItemsMap.get(entry.getKey()); - // same context schema name with different definitions cannot occur in multiple policies + // same item with different definitions cannot occur in multiple policies if (null != item) { if (item.equals(entry.getValue())) { LOGGER.info("Same {} - {} is used by multiple policies.", itemType, entry.getKey().getId()); diff --git a/model/policy-model/src/test/java/org/onap/policy/apex/model/policymodel/handling/PolicyModelMergerTest.java b/model/policy-model/src/test/java/org/onap/policy/apex/model/policymodel/handling/PolicyModelMergerTest.java index 560ddc6a9..2bdf7499f 100644 --- a/model/policy-model/src/test/java/org/onap/policy/apex/model/policymodel/handling/PolicyModelMergerTest.java +++ b/model/policy-model/src/test/java/org/onap/policy/apex/model/policymodel/handling/PolicyModelMergerTest.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. * Modifications Copyright (C) 2019 Nordix Foundation. + * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,6 +30,7 @@ import org.junit.Test; import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey; import org.onap.policy.apex.model.basicmodel.handling.ApexModelException; import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel; +import org.onap.policy.apex.model.policymodel.concepts.AxTaskLogic; /** * Test model merging. @@ -79,8 +81,12 @@ public class PolicyModelMergerTest { assertNotNull(mergedPolicyModel); final AxPolicyModel rightPolicyModel3 = new SupportApexPolicyModelCreator().getModel(); - assertThatThrownBy( - () -> PolicyModelMerger.getMergedPolicyModel(leftPolicyModel, rightPolicyModel3, true, true)) - .hasMessageContaining("Duplicate policy found"); + AxArtifactKey taskArtifactKey = new AxArtifactKey("task", "0.0.1"); + // fail when concepts in two policies have same name but different definition + // here make up some change so as to update the definition of the task in second policy + rightPolicyModel3.getTasks().getTaskMap().get(taskArtifactKey) + .setTaskLogic(new AxTaskLogic(taskArtifactKey, "logicName", "logicFlavour", "logicImpl")); + assertThatThrownBy(() -> PolicyModelMerger.getMergedPolicyModel(leftPolicyModel, rightPolicyModel3, true, true)) + .hasMessage("\n Same task - task:0.0.1 with different definitions used in different policies"); } } -- cgit 1.2.3-korg