diff options
author | a.sreekumar <ajith.sreekumar@bell.ca> | 2020-07-23 10:36:32 +0100 |
---|---|---|
committer | a.sreekumar <ajith.sreekumar@bell.ca> | 2020-07-24 17:13:47 +0100 |
commit | f68190af4f0251934734841352a77758ba53653e (patch) | |
tree | 27dcbdf0399740f307fee1fc0937afb18b52dd41 /model/policy-model | |
parent | 2169b3fbf66153ea7e066ba0057585822208d6f4 (diff) |
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 <ajith.sreekumar@bell.ca>
Diffstat (limited to 'model/policy-model')
2 files changed, 13 insertions, 15 deletions
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) { @@ -146,18 +147,9 @@ public final class PolicyModelMerger { private static <V> void checkForDuplicateItem(Map<AxArtifactKey, V> mergedItemsMap, Map<AxArtifactKey, V> 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 <V> void checkForDuplicateContextItem(Map<AxArtifactKey, V> mergedItemsMap, - Map<AxArtifactKey, V> copyOverItemsMap, StringBuilder errorMessage, String itemType) { for (Entry<AxArtifactKey, V> 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"); } } |