aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJim Hahn <jrh3@att.com>2020-08-07 13:47:58 +0000
committerGerrit Code Review <gerrit@onap.org>2020-08-07 13:47:58 +0000
commit2baf9ec970e8f4901deabbd7d7bcb5cf54607201 (patch)
treef13809fb8a1da735744d7aa8924a8bcdf0582be2
parent1dc9c599a0aa339cac04633f5b2d77c6c414e66b (diff)
parentc0d20132b774b1fa43b4fb9b322e13b6d19d33ee (diff)
Merge "Fail component health check if PDP is down"
-rw-r--r--main/src/main/java/org/onap/policy/pap/main/rest/PolicyComponentsHealthCheckProvider.java46
-rw-r--r--main/src/test/java/org/onap/policy/pap/main/rest/TestPdpGroupHealthCheckProvider.java3
-rw-r--r--main/src/test/java/org/onap/policy/pap/main/rest/TestPolicyComponentsHealthCheckProvider.java9
-rw-r--r--main/src/test/resources/rest/pdpGroup.json7
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": [
{