diff options
4 files changed, 51 insertions, 14 deletions
diff --git a/main/src/main/java/org/onap/policy/pap/main/rest/PolicyComponentsHealthCheckProvider.java b/main/src/main/java/org/onap/policy/pap/main/rest/PolicyComponentsHealthCheckProvider.java index 36f25a08..3ce8aa64 100644 --- a/main/src/main/java/org/onap/policy/pap/main/rest/PolicyComponentsHealthCheckProvider.java +++ b/main/src/main/java/org/onap/policy/pap/main/rest/PolicyComponentsHealthCheckProvider.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2019-2020 Nordix Foundation. * Modifications Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. + * 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. @@ -141,9 +142,10 @@ public class PolicyComponentsHealthCheckProvider { // Check PDPs, read status from DB try { - Map<String, List<Pdp>> pdpListWithType = fetchPdpsHealthStatus(); - if (isHealthy && (pdpListWithType.isEmpty() || pdpListWithType.values().stream().flatMap(List::stream) - .anyMatch(pdp -> !PdpHealthStatus.HEALTHY.equals(pdp.getHealthy())))) { + List<PdpGroup> groups = fetchPdpGroups(); + Map<String, List<Pdp>> pdpListWithType = fetchPdpsHealthStatus(groups); + if (isHealthy && (!verifyNumberOfPdps(groups) || pdpListWithType.values().stream().flatMap(List::stream) + .anyMatch(pdp -> !PdpHealthStatus.HEALTHY.equals(pdp.getHealthy())))) { isHealthy = false; } result.put(PapConstants.POLICY_PDPS, pdpListWithType); @@ -157,22 +159,40 @@ public class PolicyComponentsHealthCheckProvider { return Pair.of(Status.OK, result); } - private Map<String, List<Pdp>> fetchPdpsHealthStatus() throws PfModelException { + private Map<String, List<Pdp>> fetchPdpsHealthStatus(List<PdpGroup> groups) { Map<String, List<Pdp>> pdpListWithType = new HashMap<>(); - final PolicyModelsProviderFactoryWrapper modelProviderWrapper = Registry - .get(PapConstants.REG_PAP_DAO_FACTORY, PolicyModelsProviderFactoryWrapper.class); - try (PolicyModelsProvider databaseProvider = modelProviderWrapper.create()) { - final List<PdpGroup> groups = databaseProvider.getPdpGroups(null); - for (final PdpGroup group : groups) { - for (final PdpSubGroup subGroup : group.getPdpSubgroups()) { - List<Pdp> pdpList = new ArrayList<>(subGroup.getPdpInstances()); - pdpListWithType.computeIfAbsent(subGroup.getPdpType(), k -> new ArrayList<>()).addAll(pdpList); - } + for (final PdpGroup group : groups) { + for (final PdpSubGroup subGroup : group.getPdpSubgroups()) { + List<Pdp> pdpList = new ArrayList<>(subGroup.getPdpInstances()); + pdpListWithType.computeIfAbsent(subGroup.getPdpType(), k -> new ArrayList<>()).addAll(pdpList); } } return pdpListWithType; } + private boolean verifyNumberOfPdps(List<PdpGroup> groups) { + boolean flag = true; + for (final PdpGroup group : groups) { + for (final PdpSubGroup subGroup : group.getPdpSubgroups()) { + if (subGroup.getCurrentInstanceCount() < subGroup.getDesiredInstanceCount()) { + flag = false; + break; + } + } + } + return flag; + } + + private List<PdpGroup> fetchPdpGroups() throws PfModelException { + List<PdpGroup> groups = new ArrayList<>(); + final PolicyModelsProviderFactoryWrapper modelProviderWrapper = + Registry.get(PapConstants.REG_PAP_DAO_FACTORY, PolicyModelsProviderFactoryWrapper.class); + try (PolicyModelsProvider databaseProvider = modelProviderWrapper.create()) { + groups = databaseProvider.getPdpGroups(null); + } + return groups; + } + private HealthCheckReport fetchPolicyComponentHealthStatus(HttpClient httpClient) { HealthCheckReport clientReport; try { diff --git a/main/src/test/java/org/onap/policy/pap/main/rest/TestPdpGroupHealthCheckProvider.java b/main/src/test/java/org/onap/policy/pap/main/rest/TestPdpGroupHealthCheckProvider.java index c910a986..0babb71d 100644 --- a/main/src/test/java/org/onap/policy/pap/main/rest/TestPdpGroupHealthCheckProvider.java +++ b/main/src/test/java/org/onap/policy/pap/main/rest/TestPdpGroupHealthCheckProvider.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= * 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. @@ -88,7 +89,7 @@ public class TestPdpGroupHealthCheckProvider { } private void verifyPdps(final List<Pdp> pdpList, final List<PdpGroup> groups) { - assertEquals(5, pdpList.size()); + assertEquals(6, pdpList.size()); for (final PdpGroup group : groups) { for (final PdpSubGroup subGroup : group.getPdpSubgroups()) { pdpList.containsAll(subGroup.getPdpInstances()); diff --git a/main/src/test/java/org/onap/policy/pap/main/rest/TestPolicyComponentsHealthCheckProvider.java b/main/src/test/java/org/onap/policy/pap/main/rest/TestPolicyComponentsHealthCheckProvider.java index bdf4700c..ff2159d2 100644 --- a/main/src/test/java/org/onap/policy/pap/main/rest/TestPolicyComponentsHealthCheckProvider.java +++ b/main/src/test/java/org/onap/policy/pap/main/rest/TestPolicyComponentsHealthCheckProvider.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2020 Nordix Foundation. * Modifications Copyright (C) 2020 AT&T Corp. + * 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. @@ -193,6 +194,14 @@ public class TestPolicyComponentsHealthCheckProvider { } @Test + public void testFetchPolicyComponentsHealthStatus_PdpDown() { + // Set currentInstanceCount as 0 to simulate PDP down + groups.get(0).getPdpSubgroups().get(0).setCurrentInstanceCount(0); + Map<String, Object> result = callFetchPolicyComponentsHealthStatus(); + assertFalse((Boolean) result.get(HEALTHY)); + } + + @Test public void testFetchPolicyComponentsHealthStatus_unhealthyPap() { when(papActivator.isAlive()).thenReturn(false); Map<String, Object> result = callFetchPolicyComponentsHealthStatus(); diff --git a/main/src/test/resources/rest/pdpGroup.json b/main/src/test/resources/rest/pdpGroup.json index 2a7b4edc..279d8079 100644 --- a/main/src/test/resources/rest/pdpGroup.json +++ b/main/src/test/resources/rest/pdpGroup.json @@ -25,6 +25,11 @@ "instanceId": "pdpAA_2", "pdpState": "PASSIVE", "healthy": "HEALTHY" + }, + { + "instanceId": "pdpAA_3", + "pdpState": "PASSIVE", + "healthy": "HEALTHY" } ], "supportedPolicyTypes": [ @@ -42,6 +47,7 @@ }, { "pdpType": "pdpTypeB", + "currentInstanceCount": 1, "desiredInstanceCount": 1, "pdpInstances": [ { @@ -66,6 +72,7 @@ "pdpSubgroups": [ { "pdpType": "pdpTypeA", + "currentInstanceCount": 2, "desiredInstanceCount": 2, "pdpInstances": [ { |