From 0f51fa4e072aeb29f4e323cb6013fb4a873aae5c Mon Sep 17 00:00:00 2001 From: Jim Hahn Date: Wed, 31 Jan 2018 18:10:34 -0500 Subject: Fix sonar generic Exceptions in policy/common IntegrityMonitor.java: Renamed variables, Ex: dep_groups => depGroups. Renamed enum constants, Ex: pdp_xacml => PDP_XACML. Merged "if" tests. Cast values to "long" before multiplying. Re-throw interrupt(). Write exception via logger instead of e.printStackTrace(). Moved constructor to top of the file. Removed most logger.isDebugEnabled() checks. Returned generic List instead of ArrayList. Used entrySet() instead of keySet(). Removed useless parentheses. Removed superfluous exceptions from "throws" declaration. DbAudit.java: Modified DbAudit to throw DbAuditException. Replaced references to HashSet and HashMap with generic Set and Map. Modified DbAudit to iterate over entrySet() instead of keySet(). ComponentAdminException: Created ComponentAdminException class. Modified ComponentAdmin methods to throw new exception class. Extracted "stateManager" String constant. Eliminated logger.isDebugEnabled() calls. Updated the license data. Eliminated double-checked locking problem from PropertyUtil: Modified code to use Initialization On Demand Holder idiom. Change-Id: Ic01288542041da26df483ce85ecaf292ac138f85 Issue-ID: POLICY-246 Signed-off-by: Jim Hahn --- .../java/org/onap/policy/common/ia/DbAudit.java | 68 +- .../main/java/org/onap/policy/common/ia/DbDAO.java | 12 +- .../common/ia/test/DbAuditCompareEntriesTest.java | 26 +- .../org/onap/policy/common/ia/test/DbDAOTest.java | 21 +- .../onap/policy/common/im/IntegrityMonitor.java | 780 ++++++++------------- .../onap/policy/common/im/jmx/ComponentAdmin.java | 87 ++- .../common/im/jmx/ComponentAdminException.java | 42 ++ .../common/im/test/IntegrityMonitorTest.java | 12 +- 8 files changed, 457 insertions(+), 591 deletions(-) create mode 100644 integrity-monitor/src/main/java/org/onap/policy/common/im/jmx/ComponentAdminException.java diff --git a/integrity-audit/src/main/java/org/onap/policy/common/ia/DbAudit.java b/integrity-audit/src/main/java/org/onap/policy/common/ia/DbAudit.java index 0f354571..21bf5c8d 100644 --- a/integrity-audit/src/main/java/org/onap/policy/common/ia/DbAudit.java +++ b/integrity-audit/src/main/java/org/onap/policy/common/ia/DbAudit.java @@ -25,7 +25,10 @@ import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; +import java.util.Map.Entry; import java.util.Properties; +import java.util.Set; import javax.persistence.Table; @@ -111,7 +114,7 @@ public class DbAudit { } // Obtain all persistence class names for the PU we are auditing - HashSet classNameSet = dbDAO.getPersistenceClassNames(); + Set classNameSet = dbDAO.getPersistenceClassNames(); if(classNameSet == null || classNameSet.isEmpty()){ String msg = "DbAudit: For node " + resourceName + " Found no persistence class names"; @@ -139,7 +142,7 @@ public class DbAudit { * This is the map of mismatched entries indexed by className. For * each class name there is a list of mismatched entries */ - HashMap> misMatchedMap = new HashMap<>(); + Map> misMatchedMap = new HashMap<>(); // We need to keep track of how long the audit is taking long startTime = System.currentTimeMillis(); @@ -155,7 +158,7 @@ public class DbAudit { } // all instances of the class for myIae - HashMap myEntries = dbDAO.getAllMyEntries(clazzName); + Map myEntries = dbDAO.getAllMyEntries(clazzName); //get a map of the objects indexed by id. Does not necessarily have any entries if (logger.isDebugEnabled()) { @@ -184,7 +187,7 @@ public class DbAudit { theirProperties.put(IntegrityAuditProperties.NODE_TYPE, iae.getNodeType()); //get a map of the instances for their iae indexed by id - HashMap theirEntries = dbDAO.getAllEntries(persistenceUnit, theirProperties, clazzName); + Map theirEntries = dbDAO.getAllEntries(persistenceUnit, theirProperties, clazzName); if (logger.isDebugEnabled()) { logger.debug("dbAudit: For persistenceUnit=" + persistenceUnit + ", clazzName=" + clazzName @@ -197,9 +200,9 @@ public class DbAudit { * Collect the IDs for the class where a mismatch occurred. We will check * them again for all nodes later. */ - HashSet misMatchedKeySet = compareEntries(myEntries, theirEntries); + Set misMatchedKeySet = compareEntries(myEntries, theirEntries); if(!misMatchedKeySet.isEmpty()){ - HashSet misMatchedEntry = misMatchedMap.get(clazzName); + Set misMatchedEntry = misMatchedMap.get(clazzName); if(misMatchedEntry == null){ misMatchedMap.put(clazzName, misMatchedKeySet); }else{ @@ -259,8 +262,8 @@ public class DbAudit { } // all instances of the class for myIae - HashSet keySet = misMatchedMap.get(clazzName); - HashMap myEntries = dbDAO.getAllMyEntries(clazzName, keySet); + Set keySet = misMatchedMap.get(clazzName); + Map myEntries = dbDAO.getAllMyEntries(clazzName, keySet); //get a map of the objects indexed by id if (logger.isDebugEnabled()) { @@ -289,14 +292,14 @@ public class DbAudit { theirProperties.put(IntegrityAuditProperties.NODE_TYPE, iae.getNodeType()); //get a map of the instances for their iae indexed by id - HashMap theirEntries = dbDAO.getAllEntries(persistenceUnit, theirProperties, clazzName, keySet); + Map theirEntries = dbDAO.getAllEntries(persistenceUnit, theirProperties, clazzName, keySet); /* * Compare myEntries with theirEntries and get back a set of mismatched IDs. * Collect the IDs for the class where a mismatch occurred. We will now * write an error log for each. */ - HashSet misMatchedKeySet = compareEntries(myEntries, theirEntries); + Set misMatchedKeySet = compareEntries(myEntries, theirEntries); if(!misMatchedKeySet.isEmpty()){ String keysString = ""; for(Object key: misMatchedKeySet){ @@ -349,22 +352,29 @@ public class DbAudit { * @throws InterruptedException * @throws DbDaoTransactionException */ - public void dbAuditSimulate(String resourceName, String persistenceUnit) throws InterruptedException, - DbDaoTransactionException { + public void dbAuditSimulate(String resourceName, String persistenceUnit) throws DbAuditException { - logger.info("dbAuditSimulate: Starting audit simulation for resourceName=" - + resourceName + ", persistenceUnit=" + persistenceUnit); + try { + logger.info("dbAuditSimulate: Starting audit simulation for resourceName=" + + resourceName + ", persistenceUnit=" + persistenceUnit); - for (int i = 0; i < AuditThread.AUDIT_SIMULATION_ITERATIONS; i++) { - dbDAO.setLastUpdated(); - logger.info("dbAuditSimulate: i=" + i + ", sleeping " - + AuditThread.AUDIT_SIMULATION_SLEEP_INTERVAL + "ms"); - Thread.sleep(AuditThread.AUDIT_SIMULATION_SLEEP_INTERVAL); - } - - logger.info("dbAuditSimulate: Finished audit simulation for resourceName=" - + resourceName + ", persistenceUnit=" + persistenceUnit); + for (int i = 0; i < AuditThread.AUDIT_SIMULATION_ITERATIONS; i++) { + dbDAO.setLastUpdated(); + logger.info("dbAuditSimulate: i=" + i + ", sleeping " + + AuditThread.AUDIT_SIMULATION_SLEEP_INTERVAL + "ms"); + Thread.sleep(AuditThread.AUDIT_SIMULATION_SLEEP_INTERVAL); + } + logger.info("dbAuditSimulate: Finished audit simulation for resourceName=" + + resourceName + ", persistenceUnit=" + persistenceUnit); + + } catch(DbDaoTransactionException e) { + throw new DbAuditException(e); + + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new DbAuditException(e); + } } /** @@ -373,7 +383,7 @@ public class DbAudit { * @param theirEntries * @return */ - public HashSet compareEntries(HashMap myEntries, HashMap theirEntries){ + public Set compareEntries(Map myEntries, Map theirEntries){ /* * Compare the entries for the same key in each of the hashmaps. The comparison will be done by serializing the objects * (create a byte array) and then do a byte array comparison. The audit will walk the local repository hash map comparing @@ -385,8 +395,9 @@ public class DbAudit { * */ HashSet misMatchedKeySet = new HashSet<>(); - for(Object key: myEntries.keySet()){ - byte[] mySerializedEntry = SerializationUtils.serialize((Serializable) myEntries.get(key)); + for(Entry ent: myEntries.entrySet()) { + Object key = ent.getKey(); + byte[] mySerializedEntry = SerializationUtils.serialize((Serializable) ent.getValue()); byte[] theirSerializedEntry = SerializationUtils.serialize((Serializable) theirEntries.get(key)); if(!Arrays.equals(mySerializedEntry, theirSerializedEntry)){ logger.debug("compareEntries: For myEntries.key=" + key + ", entries do not match"); @@ -396,9 +407,10 @@ public class DbAudit { } } //now compare it in the other direction to catch entries in their set that is not in my set - for(Object key: theirEntries.keySet()){ + for(Entry ent: theirEntries.entrySet()) { + Object key = ent.getKey(); byte[] mySerializedEntry = SerializationUtils.serialize((Serializable) myEntries.get(key)); - byte[] theirSerializedEntry = SerializationUtils.serialize((Serializable) theirEntries.get(key)); + byte[] theirSerializedEntry = SerializationUtils.serialize((Serializable) ent.getValue()); if(!Arrays.equals(mySerializedEntry, theirSerializedEntry)){ logger.debug("compareEntries: For theirEntries.key=" + key + ", entries do not match"); misMatchedKeySet.add(key); diff --git a/integrity-audit/src/main/java/org/onap/policy/common/ia/DbDAO.java b/integrity-audit/src/main/java/org/onap/policy/common/ia/DbDAO.java index 99503854..b30c7730 100644 --- a/integrity-audit/src/main/java/org/onap/policy/common/ia/DbDAO.java +++ b/integrity-audit/src/main/java/org/onap/policy/common/ia/DbDAO.java @@ -24,7 +24,9 @@ import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Properties; +import java.util.Set; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; @@ -119,7 +121,7 @@ public class DbDAO { * @param className * @return */ - public HashMap getAllMyEntries(String className) { + public Map getAllMyEntries(String className) { logger.debug("getAllMyEntries: Entering, className=" + className); HashMap resultMap = new HashMap<>(); @@ -152,7 +154,7 @@ public class DbDAO { * @param keySet * @return */ - public HashMap getAllMyEntries(String className, HashSet keySet){ + public Map getAllMyEntries(String className, Set keySet){ logger.debug("getAllMyEntries: Entering, className=" + className + ",\n keySet=" + keySet); @@ -180,7 +182,7 @@ public class DbDAO { * @param className * @return */ - public HashMap getAllEntries(String persistenceUnit, Properties properties, String className){ + public Map getAllEntries(String persistenceUnit, Properties properties, String className){ logger.debug("getAllEntries: Entering, persistenceUnit=" + persistenceUnit + ",\n className=" + className); @@ -221,7 +223,7 @@ public class DbDAO { * @return */ - public HashMap getAllEntries(String persistenceUnit, Properties properties, String className, HashSet keySet){ + public Map getAllEntries(String persistenceUnit, Properties properties, String className, Set keySet){ logger.debug("getAllEntries: Entering, persistenceUnit=" + persistenceUnit + ",\n properties= " + properties + ",\n className=" + className + ",\n keySet= " + keySet); EntityManagerFactory theEmf = Persistence.createEntityManagerFactory(persistenceUnit, properties); @@ -364,7 +366,7 @@ public class DbDAO { * getPersistenceClassNames() gets all the persistence class names. * @return */ - public HashSet getPersistenceClassNames(){ + public Set getPersistenceClassNames(){ logger.debug("DbDAO: getPersistenceClassNames() entry"); HashSet returnList = new HashSet<>(); final Metamodel mm = emf.getMetamodel(); diff --git a/integrity-audit/src/test/java/org/onap/policy/common/ia/test/DbAuditCompareEntriesTest.java b/integrity-audit/src/test/java/org/onap/policy/common/ia/test/DbAuditCompareEntriesTest.java index d8388c58..3bedcb0b 100644 --- a/integrity-audit/src/test/java/org/onap/policy/common/ia/test/DbAuditCompareEntriesTest.java +++ b/integrity-audit/src/test/java/org/onap/policy/common/ia/test/DbAuditCompareEntriesTest.java @@ -26,7 +26,9 @@ import java.io.FileOutputStream; import java.util.Date; import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import java.util.Properties; +import java.util.Set; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; @@ -129,7 +131,7 @@ public class DbAuditCompareEntriesTest { String className = null; //There is only one entry IntegrityAuditEntity, but we will check anyway - HashSet classNameSet = dbDAO.getPersistenceClassNames(); + Set classNameSet = dbDAO.getPersistenceClassNames(); for(String c : classNameSet){ if (c.equals("org.onap.policy.common.ia.jpa.IntegrityAuditEntity")){ className = c; @@ -175,7 +177,7 @@ public class DbAuditCompareEntriesTest { myEntries.put("pdp1", entry1); theirEntries.put("pdp1", entry2); - HashSet result = dbAudit.compareEntries(myEntries, theirEntries); + Set result = dbAudit.compareEntries(myEntries, theirEntries); /* * Assert that there are no mismatches returned @@ -235,7 +237,7 @@ public class DbAuditCompareEntriesTest { myEntries.put("pdp1", entry1); theirEntries.put("pdp1", entry2); - HashSet result = dbAudit.compareEntries(myEntries, theirEntries); + Set result = dbAudit.compareEntries(myEntries, theirEntries); /* * Assert that there was one mismatch @@ -322,7 +324,7 @@ public class DbAuditCompareEntriesTest { theirEntries.put("0", entry2); theirEntries.put("2", entry4); - HashSet mismatchResult = dbAudit.compareEntries(myEntries, theirEntries); + Set mismatchResult = dbAudit.compareEntries(myEntries, theirEntries); /* * Assert 3 mismatches/missing entries were found @@ -343,8 +345,8 @@ public class DbAuditCompareEntriesTest { dbDAO = new DbDAO(resourceName, persistenceUnit, properties); DbAudit dbAudit = new DbAudit(dbDAO); - HashSet classNameSet = dbDAO.getPersistenceClassNames(); - HashSet mismatchResult = new HashSet(); + Set classNameSet = dbDAO.getPersistenceClassNames(); + Set mismatchResult = new HashSet(); for(String c : classNameSet) { if (c.equals("org.onap.policy.common.ia.jpa.IntegrityAuditEntity")){ String resourceName1 = resourceName; @@ -537,10 +539,10 @@ public class DbAuditCompareEntriesTest { new DbDAO("pdp2", persistenceUnit, properties2); // Pull all entries and compare - HashSet classNameSet = dbDAO.getPersistenceClassNames(); - HashMap myEntries; - HashMap theirEntries; - HashSet mismatchResult = new HashSet(); + Set classNameSet = dbDAO.getPersistenceClassNames(); + Map myEntries; + Map theirEntries; + Set mismatchResult = new HashSet(); String className; for(String c : classNameSet) { className = c; @@ -572,7 +574,7 @@ public class DbAuditCompareEntriesTest { String className = null; //There is only one entry IntegrityAuditEntity, but we will check anyway - HashSet classNameSet = dbDAO.getPersistenceClassNames(); + Set classNameSet = dbDAO.getPersistenceClassNames(); for(String c : classNameSet){ if (c.equals("org.onap.policy.common.ia.test.jpa.IaTestEntity")){ className = c; @@ -608,7 +610,7 @@ public class DbAuditCompareEntriesTest { myEntries.put("0", iate); theirEntries.put("0", iate2); - HashSet result = dbAudit.compareEntries(myEntries, theirEntries); + Set result = dbAudit.compareEntries(myEntries, theirEntries); /* * Assert that there are no mismatches returned diff --git a/integrity-audit/src/test/java/org/onap/policy/common/ia/test/DbDAOTest.java b/integrity-audit/src/test/java/org/onap/policy/common/ia/test/DbDAOTest.java index 4fd51f6e..ac3bc587 100644 --- a/integrity-audit/src/test/java/org/onap/policy/common/ia/test/DbDAOTest.java +++ b/integrity-audit/src/test/java/org/onap/policy/common/ia/test/DbDAOTest.java @@ -20,7 +20,10 @@ package org.onap.policy.common.ia.test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; /* * All JUnits are designed to run in the local development environment @@ -28,10 +31,11 @@ import static org.junit.Assert.*; * tasks. */ import java.util.Date; -import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Properties; +import java.util.Set; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; @@ -47,7 +51,6 @@ import javax.persistence.criteria.Root; import org.junit.After; import org.junit.Before; import org.junit.Test; - import org.onap.policy.common.ia.DbDAO; import org.onap.policy.common.ia.DbDaoTransactionException; import org.onap.policy.common.ia.IntegrityAuditProperties; @@ -487,7 +490,7 @@ public class DbDAOTest { try { // Obtain a hash with the persisted objects - HashMap entries = d.getAllMyEntries("org.onap.policy.common.ia.jpa.IntegrityAuditEntity"); + Map entries = d.getAllMyEntries("org.onap.policy.common.ia.jpa.IntegrityAuditEntity"); // Assert there were 3 entries for that class assertEquals(3, entries.size()); @@ -543,7 +546,7 @@ public class DbDAOTest { } // Obtain a hash with the persisted objects - HashMap entries = d.getAllMyEntries("org.onap.policy.common.ia.jpa.IntegrityAuditEntity", resultSet); + Map entries = d.getAllMyEntries("org.onap.policy.common.ia.jpa.IntegrityAuditEntity", resultSet); // Assert there were 3 entries for that class assertEquals(3, entries.size()); @@ -591,7 +594,7 @@ public class DbDAOTest { try { // Obtain a hash with the persisted objects - HashMap entries = d.getAllEntries("integrityAuditPU", properties, "org.onap.policy.common.ia.jpa.IntegrityAuditEntity"); + Map entries = d.getAllEntries("integrityAuditPU", properties, "org.onap.policy.common.ia.jpa.IntegrityAuditEntity"); // Assert there were 3 entries for that class assertEquals(3, entries.size()); @@ -647,7 +650,7 @@ public class DbDAOTest { } // Obtain a hash with the persisted objects - HashMap entries = d.getAllEntries("integrityAuditPU", properties, "org.onap.policy.common.ia.jpa.IntegrityAuditEntity", resultSet); + Map entries = d.getAllEntries("integrityAuditPU", properties, "org.onap.policy.common.ia.jpa.IntegrityAuditEntity", resultSet); // Assert there were 3 entries for that class assertEquals(3, entries.size()); @@ -695,7 +698,7 @@ public class DbDAOTest { try { // Obtain a hash with the persisted objects - HashMap entries = d.getAllEntries(persistenceUnit, properties, "org.onap.policy.common.ia.jpa.IntegrityAuditEntity"); + Map entries = d.getAllEntries(persistenceUnit, properties, "org.onap.policy.common.ia.jpa.IntegrityAuditEntity"); // Assert there were 3 entries for that class assertEquals(3, entries.size()); @@ -733,7 +736,7 @@ public class DbDAOTest { e.printStackTrace(); } // Retrieve persistence class names - HashSet result = d.getPersistenceClassNames(); + Set result = d.getPersistenceClassNames(); assertEquals(1, result.size()); } } diff --git a/integrity-monitor/src/main/java/org/onap/policy/common/im/IntegrityMonitor.java b/integrity-monitor/src/main/java/org/onap/policy/common/im/IntegrityMonitor.java index 5b18b05d..4a09d66d 100644 --- a/integrity-monitor/src/main/java/org/onap/policy/common/im/IntegrityMonitor.java +++ b/integrity-monitor/src/main/java/org/onap/policy/common/im/IntegrityMonitor.java @@ -27,6 +27,7 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Properties; import java.util.concurrent.TimeUnit; @@ -132,7 +133,7 @@ public class IntegrityMonitor { // A lead subsystem will have dependency groups with resource names in the // properties file. // For non-lead subsystems, the dependency_group property will be absent. - private static String[] dep_groups = null; + private static String[] depGroups = null; private static boolean isUnitTesting = false; @@ -148,12 +149,12 @@ public class IntegrityMonitor { // Node types private enum NodeType { - pdp_xacml, pdp_drools, pap, pap_admin, logparser, brms_gateway, astra_gateway, elk_server, pypdp + PDP_XACML, PDP_DROOLS, PAP, PAP_ADMIN, LOGPARSER, BRMS_GATEWAY, ASTRA_GATEWAY, ELK_SERVER, PYPDP } - private static String site_name; - private static String node_type; + private static String siteName; + private static String nodeType; private Date refreshStateAuditLastRunDate; private static long refreshStateAuditIntervalMs = 600000; // run it once per // 10 minutes @@ -169,100 +170,11 @@ public class IntegrityMonitor { private final Object checkWriteFpcLock = new Object(); private static final Object getInstanceLock = new Object(); private final Object refreshStateAuditLock = new Object(); - private final Object IMFLUSHLOCK = new Object(); + private final Object imFlushLock = new Object(); private Map allSeemsWellMap; private Map allNotWellMap; - /** - * Get an instance of IntegrityMonitor for a given resource name. It creates - * one if it does not exist. Only one instance is allowed to be created per - * resource name. - * - * @param resourceName - * The resource name of the resource - * @param properties - * a set of properties passed in from the resource - * @return The new instance of IntegrityMonitor - * @throws Exception - * if unable to create jmx url or the constructor returns an - * exception - */ - public static IntegrityMonitor getInstance(String resourceName, - Properties properties) throws Exception { - synchronized (getInstanceLock) { - if (logger.isDebugEnabled()) { - logger.debug("getInstance() called - resourceName= {}", - resourceName); - } - if (resourceName == null || resourceName.isEmpty() - || properties == null) { - logger.error("Error: getIntegrityMonitorInstance() called with invalid input"); - return null; - } - - if (instance == null) { - if (logger.isDebugEnabled()) { - logger.debug("Creating new instance of IntegrityMonitor"); - } - instance = new IntegrityMonitor(resourceName, properties); - } - return instance; - } - } - - public static IntegrityMonitor getInstance() throws Exception { - if (logger.isDebugEnabled()) { - logger.debug("getInstance() called"); - } - if (instance == null) { - String msg = "No IntegrityMonitor instance exists." - + " Please use the method IntegrityMonitor.getInstance(String resourceName, Properties properties)"; - throw new IntegrityMonitorPropertiesException(msg); - } else { - return instance; - } - } - - /* - * This is a facility used by JUnit testing to destroy the IntegrityMonitor - * instance before creating a new one. It includes a delay of 2 seconds to - * allow the FPManager to fully exit. - */ - public static void deleteInstance() throws IntegrityMonitorException { - if (logger.isDebugEnabled()) { - logger.debug("deleteInstance() called"); - } - if (isUnitTesting()) { - // Stop the FPManager thread - - if (instance != null && instance.getFPManager() != null) { - instance.getFPManager().stopAndExit(); - - try { - // Make sure it has exited - Thread.sleep(2 * CYCLE_INTERVAL_MILLIS); - } catch (InterruptedException e) { - logger.error("deleteInstance: Interrupted while waiting for FPManaager to fully exit"); - e.printStackTrace(); - } - if (instance.getFPManager().isAlive()) { - logger.error("IntegrityMonitor.deleteInstance() Failed to kill FPManager thread"); - throw new IntegrityMonitorException( - "IntegrityMonitor.deleteInstance() Failed to kill FPManager thread"); - } - instance = null; - } - } - if (logger.isDebugEnabled()) { - logger.debug("deleteInstance() exit"); - } - } - - private FPManager getFPManager() { - return fpManager; - } - /** * IntegrityMonitor constructor. It is invoked from the getInstance() method * in this class or from the constructor of a child or sub-class. A class @@ -350,17 +262,14 @@ public class IntegrityMonitor { fpx.setFpcCount(fpCounter); } else { // Create a forward progress object - if (logger.isDebugEnabled()) { - logger.debug("Adding resource {} to ForwardProgress table", - resourceName); - } + logger.debug("Adding resource {} to ForwardProgress table", resourceName); fpx = new ForwardProgressEntity(); } // update/set columns in entry fpx.setResourceName(resourceName); em.persist(fpx); // flush to the DB - synchronized (IMFLUSHLOCK) { + synchronized (imFlushLock) { em.flush(); } @@ -388,21 +297,17 @@ public class IntegrityMonitor { rrx.setLastUpdated(new Date()); } else { // register resource by adding entry to table in DB - if (logger.isDebugEnabled()) { - logger.debug( - "Adding resource {} to ResourceRegistration table", - resourceName); - } + logger.debug("Adding resource {} to ResourceRegistration table", resourceName); rrx = new ResourceRegistrationEntity(); } // update/set columns in entry rrx.setResourceName(resourceName); rrx.setResourceUrl(jmxUrl); - rrx.setNodeType(node_type); - rrx.setSite(site_name); + rrx.setNodeType(nodeType); + rrx.setSite(siteName); em.persist(rrx); // flush to the DB - synchronized (IMFLUSHLOCK) { + synchronized (imFlushLock) { et.commit(); } @@ -412,7 +317,7 @@ public class IntegrityMonitor { e); try { if (et.isActive()) { - synchronized (IMFLUSHLOCK) { + synchronized (imFlushLock) { et.rollback(); } } @@ -448,29 +353,104 @@ public class IntegrityMonitor { } + /** + * Get an instance of IntegrityMonitor for a given resource name. It creates + * one if it does not exist. Only one instance is allowed to be created per + * resource name. + * + * @param resourceName + * The resource name of the resource + * @param properties + * a set of properties passed in from the resource + * @return The new instance of IntegrityMonitor + * @throws Exception + * if unable to create jmx url or the constructor returns an + * exception + */ + public static IntegrityMonitor getInstance(String resourceName, + Properties properties) throws Exception { + synchronized (getInstanceLock) { + logger.debug("getInstance() called - resourceName= {}", resourceName); + if (resourceName == null || resourceName.isEmpty() + || properties == null) { + logger.error("Error: getIntegrityMonitorInstance() called with invalid input"); + return null; + } + + if (instance == null) { + logger.debug("Creating new instance of IntegrityMonitor"); + instance = new IntegrityMonitor(resourceName, properties); + } + return instance; + } + } + + public static IntegrityMonitor getInstance() throws Exception { + logger.debug("getInstance() called"); + if (instance == null) { + String msg = "No IntegrityMonitor instance exists." + + " Please use the method IntegrityMonitor.getInstance(String resourceName, Properties properties)"; + throw new IntegrityMonitorPropertiesException(msg); + } else { + return instance; + } + } + + /* + * This is a facility used by JUnit testing to destroy the IntegrityMonitor + * instance before creating a new one. It includes a delay of 2 seconds to + * allow the FPManager to fully exit. + */ + public static void deleteInstance() throws IntegrityMonitorException { + logger.debug("deleteInstance() called"); + if (isUnitTesting() && instance != null && instance.getFPManager() != null) { + // Stop the FPManager thread + instance.getFPManager().stopAndExit(); + + try { + // Make sure it has exited + Thread.sleep(2L * CYCLE_INTERVAL_MILLIS); + } catch (InterruptedException e) { + logger.error("deleteInstance: Interrupted while waiting for FPManaager to fully exit", e); + Thread.currentThread().interrupt(); + } + if (instance.getFPManager().isAlive()) { + logger.error("IntegrityMonitor.deleteInstance() Failed to kill FPManager thread"); + throw new IntegrityMonitorException( + "IntegrityMonitor.deleteInstance() Failed to kill FPManager thread"); + } + instance = null; + } + logger.debug("deleteInstance() exit"); + } + + private FPManager getFPManager() { + return fpManager; + } + private static String getJmxUrl() throws IntegrityMonitorException { // get the jmx remote port and construct the JMX URL Properties systemProps = System.getProperties(); - String jmx_port = systemProps + String jmxPort = systemProps .getProperty("com.sun.management.jmxremote.port"); - String jmx_err_msg; - if (jmx_port == null) { - jmx_err_msg = "System property com.sun.management.jmxremote.port for JMX remote port is not set"; - logger.error("{}", jmx_err_msg); + String jmxErrMsg; + if (jmxPort == null) { + jmxErrMsg = "System property com.sun.management.jmxremote.port for JMX remote port is not set"; + logger.error("{}", jmxErrMsg); throw new IntegrityMonitorException("getJmxUrl exception: " - + jmx_err_msg); + + jmxErrMsg); } int port = 0; try { - port = Integer.parseInt(jmx_port); + port = Integer.parseInt(jmxPort); } catch (NumberFormatException e) { - jmx_err_msg = "JMX remote port is not a valid integer value - " - + jmx_port; - logger.error("{}", jmx_err_msg); + jmxErrMsg = "JMX remote port is not a valid integer value - " + + jmxPort; + logger.error("{}", jmxErrMsg); throw new IntegrityMonitorException("getJmxUrl exception: " - + jmx_err_msg); + + jmxErrMsg); } try { @@ -493,14 +473,12 @@ public class IntegrityMonitor { } // assemble the jmx url - String jmx_url = "service:jmx:rmi:///jndi/rmi://" + jmxFqdn + ":" + String jmxUrl = "service:jmx:rmi:///jndi/rmi://" + jmxFqdn + ":" + port + "/jmxrmi"; - if (logger.isDebugEnabled()) { - logger.debug("IntegerityMonitor - jmx url={}", jmx_url); - } + logger.debug("IntegerityMonitor - jmx url={}", jmxUrl); - return jmx_url; + return jmxUrl; } /** @@ -511,25 +489,18 @@ public class IntegrityMonitor { * information about any dependency (node) which has failed. */ public void evaluateSanity() throws Exception { - if (logger.isDebugEnabled()) { - logger.debug("evaluateSanity called ...."); - } + logger.debug("evaluateSanity called ...."); synchronized (evaluateSanityLock) { - String error_msg = dependencyCheckErrorMsg; - if (logger.isDebugEnabled()) { - logger.debug("evaluateSanity dependencyCheckErrorMsg = {}", - error_msg); - } + String errorMsg = dependencyCheckErrorMsg; + logger.debug("evaluateSanity dependencyCheckErrorMsg = {}", errorMsg); // check op state and throw exception if disabled if ((stateManager.getOpState() != null) && stateManager.getOpState().equals( StateManagement.DISABLED)) { String msg = "Resource " + resourceName - + " operation state is disabled. " + error_msg; - if (logger.isDebugEnabled()) { - logger.debug("{}", msg); - } + + " operation state is disabled. " + errorMsg; + logger.debug("{}", msg); throw new IntegrityMonitorException(msg); } @@ -539,9 +510,7 @@ public class IntegrityMonitor { StateManagement.LOCKED)) { String msg = "Resource " + resourceName + " is administratively locked"; - if (logger.isDebugEnabled()) { - logger.debug("{}", msg); - } + logger.debug("{}", msg); throw new AdministrativeStateException( "IntegrityMonitor Admin State Exception: " + msg); } @@ -550,9 +519,7 @@ public class IntegrityMonitor { && stateManager.getStandbyStatus().equals( StateManagement.COLD_STANDBY)) { String msg = "Resource " + resourceName + " is cold standby"; - if (logger.isDebugEnabled()) { - logger.debug("{}", msg); - } + logger.debug("{}", msg); throw new StandbyStatusException( "IntegrityMonitor Standby Status Exception: " + msg); } @@ -568,10 +535,8 @@ public class IntegrityMonitor { * the error message is set then the evaluateSanity will return an error. */ public String stateCheck(String dep) { - if (logger.isDebugEnabled()) { - logger.debug("checking state of dependent resource: {}", dep); - } - String error_msg = null; + logger.debug("checking state of dependent resource: {}", dep); + String errorMsg = null; ForwardProgressEntity forwardProgressEntity = null; StateManagementEntity stateManagementEntity = null; @@ -593,32 +558,28 @@ public class IntegrityMonitor { forwardProgressEntity = (ForwardProgressEntity) fpList.get(0); // refresh the object from DB in case cached data was returned em.refresh(forwardProgressEntity); - if (logger.isDebugEnabled()) { - logger.debug( - "Found entry in ForwardProgressEntity table for dependent Resource={}", - dep); - } + logger.debug("Found entry in ForwardProgressEntity table for dependent Resource={}", dep); } else { - error_msg = dep + errorMsg = dep + ": resource not found in ForwardProgressEntity database table"; - logger.error("{}", error_msg); + logger.error("{}", errorMsg); } - synchronized (IMFLUSHLOCK) { + synchronized (imFlushLock) { et.commit(); } } catch (Exception ex) { // log an error - error_msg = dep + errorMsg = dep + ": ForwardProgressEntity DB operation failed with exception: "; - logger.error("{}", error_msg, ex); - synchronized (IMFLUSHLOCK) { + logger.error("{}", errorMsg, ex); + synchronized (imFlushLock) { if (et.isActive()) { et.rollback(); } } } - if (error_msg == null) { + if (errorMsg == null) { // Start a transaction et = em.getTransaction(); et.begin(); @@ -638,26 +599,22 @@ public class IntegrityMonitor { // refresh the object from DB in case cached data was // returned em.refresh(stateManagementEntity); - if (logger.isDebugEnabled()) { - logger.debug( - "Found entry in StateManagementEntity table for dependent Resource={}", - dep); - } + logger.debug("Found entry in StateManagementEntity table for dependent Resource={}", dep); } else { - error_msg = dep + errorMsg = dep + ": resource not found in state management entity database table"; - logger.error("{}", error_msg); + logger.error("{}", errorMsg); } - synchronized (IMFLUSHLOCK) { + synchronized (imFlushLock) { et.commit(); } } catch (Exception e) { // log an error - error_msg = dep + errorMsg = dep + ": StateManagementEntity DB read failed with exception: "; - logger.error("{}", error_msg, e); - synchronized (IMFLUSHLOCK) { + logger.error("{}", errorMsg, e); + synchronized (imFlushLock) { if (et.isActive()) { et.rollback(); } @@ -666,33 +623,23 @@ public class IntegrityMonitor { } // verify that the ForwardProgress is current (check last_updated) - if (error_msg == null) { + if (errorMsg == null) { if (forwardProgressEntity != null && stateManagementEntity != null) { Date date = new Date(); long diffMs = date.getTime() - forwardProgressEntity.getLastUpdated().getTime(); - if (logger.isDebugEnabled()) { - logger.debug("IntegrityMonitor.stateCheck(): diffMs = {}", - diffMs); - } + logger.debug("IntegrityMonitor.stateCheck(): diffMs = {}", diffMs); // Threshold for a stale entry long staleMs = 1000L * maxFpcUpdateInterval; - if (logger.isDebugEnabled()) { - logger.debug("IntegrityMonitor.stateCheck(): staleMs = {}", - staleMs); - } + logger.debug("IntegrityMonitor.stateCheck(): staleMs = {}", staleMs); if (diffMs > staleMs) { // ForwardProgress is stale. Disable it try { if (!stateManagementEntity.getOpState().equals( StateManagement.DISABLED)) { - if (logger.isDebugEnabled()) { - logger.debug( - "IntegrityMonitor.stateCheck(): Changing OpStat = disabled for {}", - dep); - } + logger.debug("IntegrityMonitor.stateCheck(): Changing OpStat = disabled for {}", dep); stateManager.disableFailed(dep); } } catch (Exception e) { @@ -718,47 +665,41 @@ public class IntegrityMonitor { } // check operation, admin and standby states of dependent resource - if (error_msg == null) { + if (errorMsg == null) { if (stateManagementEntity != null) { if ((stateManager.getAdminState() != null) && stateManagementEntity.getAdminState().equals( StateManagement.LOCKED)) { - error_msg = dep + ": resource is administratively locked"; - logger.error("{}", error_msg); + errorMsg = dep + ": resource is administratively locked"; + logger.error("{}", errorMsg); } else if ((stateManager.getOpState() != null) && stateManagementEntity.getOpState().equals( StateManagement.DISABLED)) { - error_msg = dep + ": resource is operationally disabled"; - logger.error("{}", error_msg); + errorMsg = dep + ": resource is operationally disabled"; + logger.error("{}", errorMsg); } else if ((stateManager.getStandbyStatus() != null) && stateManagementEntity.getStandbyStatus().equals( StateManagement.COLD_STANDBY)) { - error_msg = dep + ": resource is cold standby"; - logger.error("{}", error_msg); + errorMsg = dep + ": resource is cold standby"; + logger.error("{}", errorMsg); } } else { - error_msg = dep + errorMsg = dep + ": could not check standy state of resource. stateManagementEntity == null."; - logger.error("{}", error_msg); + logger.error("{}", errorMsg); } } String returnMsg = "IntegrityMonitor.stateCheck(): returned error_msg: " - + error_msg; - if (logger.isDebugEnabled()) { - logger.debug("{}", returnMsg); - } - return error_msg; + + errorMsg; + logger.debug("{}", returnMsg); + return errorMsg; } private String fpCheck(String dep) { - if (logger.isDebugEnabled()) { - logger.debug( - "checking forward progress count of dependent resource: {}", - dep); - } + logger.debug("checking forward progress count of dependent resource: {}", dep); - String error_msg = null; + String errorMsg = null; // check FPC count - a changing FPC count indicates the resource JVM is // running @@ -789,21 +730,17 @@ public class IntegrityMonitor { // if dependent resource FPC has not been updated, consider it // an error if ((currTime - fpx.getLastUpdated().getTime()) > (1000 * maxFpcUpdateInterval)) { - error_msg = dep + errorMsg = dep + ": FP count has not been updated in the last " + maxFpcUpdateInterval + " seconds"; - logger.error("{}", error_msg); + logger.error("{}", errorMsg); try { // create instance of StateMangement class for dependent StateManagement depStateManager = new StateManagement( emf, dep); if (!depStateManager.getOpState().equals( StateManagement.DISABLED)) { - if (logger.isDebugEnabled()) { - logger.debug( - "Forward progress not detected for dependent resource {}. Setting dependent's state to disable failed.", - dep); - } + logger.debug("Forward progress not detected for dependent resource {}. Setting dependent's state to disable failed.", dep); depStateManager.disableFailed(); } } catch (Exception e) { @@ -815,32 +752,30 @@ public class IntegrityMonitor { } } else { // resource entry not found in FPC table - error_msg = dep + errorMsg = dep + ": resource not found in ForwardProgressEntity table in the DB"; - logger.error("{}", error_msg); + logger.error("{}", errorMsg); } - synchronized (IMFLUSHLOCK) { + synchronized (imFlushLock) { et.commit(); } } catch (Exception e) { // log an error and continue - error_msg = dep + errorMsg = dep + ": ForwardProgressEntity DB read failed with exception: "; - logger.error("{}", error_msg, e); - synchronized (IMFLUSHLOCK) { + logger.error("{}", errorMsg, e); + synchronized (imFlushLock) { if (et.isActive()) { et.rollback(); } } } - return error_msg; + return errorMsg; } - public ArrayList getAllForwardProgressEntity() { - if (logger.isDebugEnabled()) { - logger.debug("getAllForwardProgressEntity: entry"); - } + public List getAllForwardProgressEntity() { + logger.debug("getAllForwardProgressEntity: entry"); ArrayList fpList = new ArrayList<>(); // Start a transaction EntityTransaction et = em.getTransaction(); @@ -851,13 +786,10 @@ public class IntegrityMonitor { @SuppressWarnings("rawtypes") List myList = fquery.setLockMode(LockModeType.NONE) .setFlushMode(FlushModeType.COMMIT).getResultList(); - synchronized (IMFLUSHLOCK) { + synchronized (imFlushLock) { et.commit(); } - if (logger.isDebugEnabled()) { - logger.debug("getAllForwardProgressEntity: myList.size(): {}", - myList.size()); - } + logger.debug("getAllForwardProgressEntity: myList.size(): {}", myList.size()); if (!myList.isEmpty()) { for (int i = 0; i < myList.size(); i++) { if (logger.isDebugEnabled()) { @@ -869,7 +801,7 @@ public class IntegrityMonitor { fpList.add((ForwardProgressEntity) myList.get(i)); } } - synchronized (IMFLUSHLOCK) { + synchronized (imFlushLock) { if (et.isActive()) { et.commit(); } @@ -878,7 +810,7 @@ public class IntegrityMonitor { // log an error and continue String msg = "getAllForwardProgessEntity DB read failed with exception: "; logger.error("{}", msg, e); - synchronized (IMFLUSHLOCK) { + synchronized (imFlushLock) { if (et.isActive()) { et.rollback(); } @@ -888,13 +820,9 @@ public class IntegrityMonitor { } private String jmxCheck(String dep) { - if (logger.isDebugEnabled()) { - logger.debug( - "checking health of dependent by calling test() via JMX on resource: {}", - dep); - } + logger.debug("checking health of dependent by calling test() via JMX on resource: {}", dep); - String error_msg = null; + String errorMsg = null; // get the JMX URL from the database String jmxUrl = null; @@ -924,19 +852,19 @@ public class IntegrityMonitor { dep, jmxUrl, rrx.getCreatedDate()); } } else { - error_msg = dep + errorMsg = dep + ": resource not found in ResourceRegistrationEntity table in the DB"; - logger.error("{}", error_msg); + logger.error("{}", errorMsg); } - synchronized (IMFLUSHLOCK) { + synchronized (imFlushLock) { et.commit(); } } catch (Exception e) { - error_msg = dep + errorMsg = dep + ": ResourceRegistrationEntity DB read failed with exception: "; - logger.error("{}", error_msg, e); - synchronized (IMFLUSHLOCK) { + logger.error("{}", errorMsg, e); + synchronized (imFlushLock) { if (et.isActive()) { et.rollback(); } @@ -955,14 +883,11 @@ public class IntegrityMonitor { // invoke the test method via the jmx proxy admin.test(); - if (logger.isDebugEnabled()) { - logger.debug("Dependent resource {} sanity test passed", - dep); - } + logger.debug("Dependent resource {} sanity test passed", dep); } catch (Exception e) { - error_msg = dep + errorMsg = dep + ": resource sanity test failed with exception: "; - logger.error("{}", error_msg, e); + logger.error("{}", errorMsg, e); } finally { // close the JMX connector if (jmxAgentConnection != null) { @@ -971,17 +896,15 @@ public class IntegrityMonitor { } } - return error_msg; + return errorMsg; } public String dependencyCheck() { - if (logger.isDebugEnabled()) { - logger.debug("dependencyCheck: entry"); - } + logger.debug("dependencyCheck: entry"); synchronized (dependencyCheckLock) { // Start with the error message empty - String error_msg = ""; + String errorMsg = ""; boolean dependencyFailure = false; /* @@ -1002,18 +925,18 @@ public class IntegrityMonitor { resourceName, e.getMessage()); } // Capture the subsystemTest failure info - if (!error_msg.isEmpty()) { - error_msg = error_msg.concat(","); + if (!errorMsg.isEmpty()) { + errorMsg = errorMsg.concat(","); } - error_msg = error_msg.concat(resourceName + ": " + errorMsg = errorMsg.concat(resourceName + ": " + e.getMessage()); this.stateManager.disableDependency(); } catch (Exception ex) { logger.error("IntegrityMonitor threw exception.", ex); - if (!error_msg.isEmpty()) { - error_msg = error_msg.concat(","); + if (!errorMsg.isEmpty()) { + errorMsg = errorMsg.concat(","); } - error_msg = error_msg + errorMsg = errorMsg .concat("\n" + resourceName + ": Failed to disable dependency after subsystemTest failure due to: " @@ -1022,9 +945,9 @@ public class IntegrityMonitor { } // Check the sanity of dependents for lead subcomponents - if (dep_groups != null && dep_groups.length > 0) { + if (depGroups != null && depGroups.length > 0) { // check state of resources in dependency groups - for (String group : dep_groups) { + for (String group : depGroups) { group = group.trim(); if (group.isEmpty()) { // ignore empty group @@ -1035,45 +958,43 @@ public class IntegrityMonitor { logger.debug("group dependencies = {}", Arrays.toString(dependencies)); } - int real_dep_count = 0; - int fail_dep_count = 0; + int realDepCount = 0; + int failDepCount = 0; for (String dep : dependencies) { dep = dep.trim(); if (dep.isEmpty()) { // ignore empty dependency continue; } - real_dep_count++; // this is a valid dependency whose + realDepCount++; // this is a valid dependency whose // state is tracked - String fail_msg = fpCheck(dep); // if a resource is + String failMsg = fpCheck(dep); // if a resource is // down, its FP count // will not be // incremented - if (fail_msg == null) { + if (failMsg == null) { if (testViaJmx) { - fail_msg = jmxCheck(dep); + failMsg = jmxCheck(dep); } else { - fail_msg = stateCheck(dep); + failMsg = stateCheck(dep); } } - if (fail_msg != null) { - fail_dep_count++; - if (!error_msg.isEmpty()) { - error_msg = error_msg.concat(", "); + if (failMsg != null) { + failDepCount++; + if (!errorMsg.isEmpty()) { + errorMsg = errorMsg.concat(", "); } - error_msg = error_msg.concat(fail_msg); + errorMsg = errorMsg.concat(failMsg); } }// end for (String dep : dependencies) // if all dependencies in a group are failed, set this // resource's state to disable dependency - if ((real_dep_count > 0) - && (fail_dep_count == real_dep_count)) { + if ((realDepCount > 0) + && (failDepCount == realDepCount)) { dependencyFailure = true; try { - if(logger.isDebugEnabled()){ - logger.debug("All dependents in group {} have failed their health check. Updating this resource's state to disableDependency", group); - } + logger.debug("All dependents in group {} have failed their health check. Updating this resource's state to disableDependency", group); if(stateManager.getAvailStatus()== null || !( (stateManager.getAvailStatus()).equals(StateManagement.DEPENDENCY) || (stateManager.getAvailStatus()).equals(StateManagement.DEPENDENCY_FAILED) ) ){ // Note: redundant calls are made by refreshStateAudit @@ -1081,10 +1002,10 @@ public class IntegrityMonitor { } } catch (Exception e) { logger.error("IntegrityMonitor threw exception.", e); - if (!error_msg.isEmpty()) { - error_msg = error_msg.concat(","); + if (!errorMsg.isEmpty()) { + errorMsg = errorMsg.concat(","); } - error_msg = error_msg.concat(resourceName + errorMsg = errorMsg.concat(resourceName + ": Failed to disable dependency"); break; // break out on failure and skip checking // other groups @@ -1092,7 +1013,7 @@ public class IntegrityMonitor { } // check the next group - }// end for (String group : dep_groups) + }// end for (String group : depGroups) /* * We have checked all the dependency groups. If all are ok and @@ -1100,9 +1021,7 @@ public class IntegrityMonitor { */ if (!dependencyFailure) { try { - if (logger.isDebugEnabled()) { - logger.debug("All dependency groups have at least one viable member. Updating this resource's state to enableNoDependency"); - } + logger.debug("All dependency groups have at least one viable member. Updating this resource's state to enableNoDependency"); if(stateManager.getAvailStatus() != null && ((stateManager.getAvailStatus()).equals(StateManagement.DEPENDENCY) || (stateManager.getAvailStatus()).equals(StateManagement.DEPENDENCY_FAILED)) ){ // Note: redundant calls are made by refreshStateAudit @@ -1110,10 +1029,10 @@ public class IntegrityMonitor { } // The refreshStateAudit will catch the case where it is disabled but availStatus != failed } catch (Exception e) { logger.error("IntegrityMonitor threw exception.", e); - if (!error_msg.isEmpty()) { - error_msg = error_msg.concat(","); + if (!errorMsg.isEmpty()) { + errorMsg = errorMsg.concat(","); } - error_msg = error_msg.concat(resourceName + errorMsg = errorMsg.concat(resourceName + ": Failed to enable no dependency"); } } @@ -1126,9 +1045,7 @@ public class IntegrityMonitor { * production environment...but you never know. */ try { - if (logger.isDebugEnabled()) { - logger.debug("There are no dependents. Updating this resource's state to enableNoDependency"); - } + logger.debug("There are no dependents. Updating this resource's state to enableNoDependency"); if(stateManager.getAvailStatus() != null && ((stateManager.getAvailStatus()).equals(StateManagement.DEPENDENCY) || (stateManager.getAvailStatus()).equals(StateManagement.DEPENDENCY_FAILED)) ){ // Note: redundant calls are made by refreshStateAudit @@ -1137,27 +1054,25 @@ public class IntegrityMonitor { // disabled but availStatus != failed } catch (Exception e) { logger.error("IntegrityMonitor threw exception.", e); - if (!error_msg.isEmpty()) { - error_msg = error_msg.concat(","); + if (!errorMsg.isEmpty()) { + errorMsg = errorMsg.concat(","); } - error_msg = error_msg.concat(resourceName + errorMsg = errorMsg.concat(resourceName + ": Failed to enable no dependency"); } } - if (!error_msg.isEmpty()) { + if (!errorMsg.isEmpty()) { logger.error( "Sanity failure detected in a dependent resource: {}", - error_msg); + errorMsg); } - dependencyCheckErrorMsg = error_msg; + dependencyCheckErrorMsg = errorMsg; lastDependencyCheckTime = System.currentTimeMillis(); - if (logger.isDebugEnabled()) { - logger.debug("dependencyCheck: exit"); - } - return error_msg; + logger.debug("dependencyCheck: exit"); + return errorMsg; } } @@ -1169,9 +1084,7 @@ public class IntegrityMonitor { */ public void testTransaction() { synchronized (testTransactionLock){ - if(logger.isDebugEnabled()){ - logger.debug("testTransaction: entry"); - } + logger.debug("testTransaction: entry"); // // startTransaction() not required for testTransaction // @@ -1188,9 +1101,7 @@ public class IntegrityMonitor { */ public void subsystemTest() throws IntegrityMonitorException { // Testing provided by subsystem - if (logger.isDebugEnabled()) { - logger.debug("IntegrityMonitor subsystemTest() OK"); - } + logger.debug("IntegrityMonitor subsystemTest() OK"); } /** @@ -1306,7 +1217,7 @@ public class IntegrityMonitor { fpx.setFpcCount(fpCounter); em.persist(fpx); // flush to the DB and commit - synchronized (IMFLUSHLOCK) { + synchronized (imFlushLock) { et.commit(); } } else { @@ -1317,7 +1228,7 @@ public class IntegrityMonitor { } } catch (Exception e) { try { - synchronized (IMFLUSHLOCK) { + synchronized (imFlushLock) { if (et.isActive()) { et.rollback(); } @@ -1433,12 +1344,12 @@ public class IntegrityMonitor { // site_1.pdp_2 if (prop.getProperty(IntegrityMonitorProperties.DEPENDENCY_GROUPS) != null) { try { - dep_groups = prop.getProperty( + depGroups = prop.getProperty( IntegrityMonitorProperties.DEPENDENCY_GROUPS) .split(";"); if (logger.isDebugEnabled()) { logger.debug("dependency groups property = {}", - Arrays.toString(dep_groups)); + Arrays.toString(depGroups)); } } catch (Exception e) { logger.warn("Ignored invalid property: {}", @@ -1446,29 +1357,29 @@ public class IntegrityMonitor { } } - site_name = prop.getProperty(IntegrityMonitorProperties.SITE_NAME); - if (site_name == null) { + siteName = prop.getProperty(IntegrityMonitorProperties.SITE_NAME); + if (siteName == null) { String msg = IntegrityMonitorProperties.SITE_NAME + " property is null"; logger.error("{}", msg); throw new IntegrityMonitorPropertiesException( "IntegrityMonitor Property Exception: " + msg); } else { - site_name = site_name.trim(); + siteName = siteName.trim(); } - node_type = prop.getProperty(IntegrityMonitorProperties.NODE_TYPE); - if (node_type == null) { + nodeType = prop.getProperty(IntegrityMonitorProperties.NODE_TYPE); + if (nodeType == null) { String msg = IntegrityMonitorProperties.NODE_TYPE + " property is null"; logger.error("{}", msg); throw new IntegrityMonitorPropertiesException( "IntegrityMonitor Property Exception: " + msg); } else { - node_type = node_type.trim(); - if (!isNodeTypeEnum(node_type)) { + nodeType = nodeType.trim(); + if (!isNodeTypeEnum(nodeType)) { String msg = IntegrityMonitorProperties.NODE_TYPE - + " property " + node_type + " is invalid"; + + " property " + nodeType + " is invalid"; logger.error("{}", msg); throw new IntegrityMonitorPropertiesException( "IntegrityMonitor Property Exception: " + msg); @@ -1476,9 +1387,9 @@ public class IntegrityMonitor { } if (prop.getProperty(IntegrityMonitorProperties.TEST_VIA_JMX) != null) { - String jmx_test = prop.getProperty( + String jmxTest = prop.getProperty( IntegrityMonitorProperties.TEST_VIA_JMX).trim(); - testViaJmx = Boolean.parseBoolean(jmx_test); + testViaJmx = Boolean.parseBoolean(jmxTest); } if (prop.getProperty(IntegrityMonitorProperties.JMX_FQDN) != null) { @@ -1523,11 +1434,9 @@ public class IntegrityMonitor { e); } } - - if(logger.isDebugEnabled()){ - logger.debug("IntegrityMonitor.validateProperties(): Property values \n" - + "maxFpcUpdateInterval = {}\n", maxFpcUpdateInterval); - } + + logger.debug("IntegrityMonitor.validateProperties(): Property values \n" + + "maxFpcUpdateInterval = {}\n", maxFpcUpdateInterval); return; } @@ -1540,15 +1449,14 @@ public class IntegrityMonitor { logger.error("IntegrityMonitor threw exception.", e); } } else { - if (logger.isDebugEnabled()) { - logger.debug("Update integrity monitor properties not allowed"); - } + logger.debug("Update integrity monitor properties not allowed"); } } private static boolean isNodeTypeEnum(String nodeType) { + String upper = nodeType.toUpperCase(); for (NodeType n : NodeType.values()) { - if (n.toString().equals(nodeType)) { + if (n.toString().equals(upper)) { return true; } } @@ -1561,15 +1469,11 @@ public class IntegrityMonitor { * set. The state is restored when forward progress continues. */ private void fpMonitorCycle() { - if(logger.isDebugEnabled()){ - logger.debug("fpMonitorCycle(): entry"); - } + logger.debug("fpMonitorCycle(): entry"); synchronized (fpMonitorCycleLock) { // monitoring interval checks if (monitorInterval <= 0) { - if(logger.isDebugEnabled()){ - logger.debug("fpMonitorCycle(): disabled"); - } + logger.debug("fpMonitorCycle(): disabled"); elapsedTime = 0; return; // monitoring is disabled } @@ -1587,11 +1491,9 @@ public class IntegrityMonitor { // no forward progress missedCycles += 1; if (missedCycles >= failedCounterThreshold && !alarmExists) { - if (logger.isDebugEnabled()) { - logger.debug( - "Forward progress not detected for resource {}. Setting state to disable failed.", - resourceName); - } + logger.debug( + "Forward progress not detected for resource {}. Setting state to disable failed.", + resourceName); if (!(stateManager.getOpState()) .equals(StateManagement.DISABLED)) { // Note: The refreshStateAudit will make redundant @@ -1607,11 +1509,9 @@ public class IntegrityMonitor { lastFpCounter = fpCounter; missedCycles = 0; // set op state to enabled - if (logger.isDebugEnabled()) { - logger.debug( - "Forward progress detected for resource {}. Setting state to enable not failed.", - resourceName); - } + logger.debug( + "Forward progress detected for resource {}. Setting state to enable not failed.", + resourceName); if (!(stateManager.getOpState()) .equals(StateManagement.ENABLED)) { // Note: The refreshStateAudit will make redundant calls @@ -1625,9 +1525,7 @@ public class IntegrityMonitor { logger.error("FP Monitor encountered error. ", e); } } - if(logger.isDebugEnabled()){ - logger.debug("fpMonitorCycle(): exit"); - } + logger.debug("fpMonitorCycle(): exit"); } /** @@ -1636,35 +1534,25 @@ public class IntegrityMonitor { * then disable them. */ private void stateAudit() { - if(logger.isDebugEnabled()){ - logger.debug("IntegrityMonitor.stateAudit(): entry"); - } + logger.debug("IntegrityMonitor.stateAudit(): entry"); if (stateAuditIntervalMs <= 0) { - if(logger.isDebugEnabled()){ - logger.debug("IntegrityMonitor.stateAudit(): disabled"); - } + logger.debug("IntegrityMonitor.stateAudit(): disabled"); return; // stateAudit is disabled } //Only run from nodes that are operational if(stateManager.getOpState().equals(StateManagement.DISABLED)){ - if(logger.isDebugEnabled()){ - logger.debug("IntegrityMonitor.stateAudit(): DISABLED. returning"); - } + logger.debug("IntegrityMonitor.stateAudit(): DISABLED. returning"); return; } if(stateManager.getAdminState().equals(StateManagement.LOCKED)){ - if(logger.isDebugEnabled()){ - logger.debug("IntegrityMonitor.stateAudit(): LOCKED. returning"); - } + logger.debug("IntegrityMonitor.stateAudit(): LOCKED. returning"); return; } if(!stateManager.getStandbyStatus().equals(StateManagement.NULL_VALUE) && stateManager.getStandbyStatus()!= null){ if(!stateManager.getStandbyStatus().equals(StateManagement.PROVIDING_SERVICE)){ - if(logger.isDebugEnabled()){ - logger.debug("IntegrityMonitor.stateAudit(): NOT PROVIDING_SERVICE. returning"); - } + logger.debug("IntegrityMonitor.stateAudit(): NOT PROVIDING_SERVICE. returning"); return; } } @@ -1672,29 +1560,23 @@ public class IntegrityMonitor { Date date = new Date(); long timeSinceLastStateAudit = date.getTime() - lastStateAuditTime.getTime(); if (timeSinceLastStateAudit < stateAuditIntervalMs){ - if(logger.isDebugEnabled()){ - logger.debug("IntegrityMonitor.stateAudit(): Not time to run. returning"); - } + logger.debug("IntegrityMonitor.stateAudit(): Not time to run. returning"); return; } executeStateAudit(); lastStateAuditTime = date; - - if(logger.isDebugEnabled()){ - logger.debug("IntegrityMonitor.stateAudit(): exit"); - } + + logger.debug("IntegrityMonitor.stateAudit(): exit"); }// end stateAudit() public void executeStateAudit(){ - if(logger.isDebugEnabled()){ - logger.debug("IntegrityMonitor.executeStateAudit(): entry"); - } + logger.debug("IntegrityMonitor.executeStateAudit(): entry"); Date date = new Date(); // Get all entries in the forwardprogressentity table - ArrayList fpList = getAllForwardProgressEntity(); + List fpList = getAllForwardProgressEntity(); // Check if each forwardprogressentity entry is current for(ForwardProgressEntity fpe : fpList){ @@ -1718,9 +1600,7 @@ public class IntegrityMonitor { if(diffMs > staleMs){ //ForwardProgress is stale. Disable it // Start a transaction - if(logger.isDebugEnabled()){ - logger.debug("IntegrityMonitor.executeStateAudit(): resource = {}, FPC is stale. Disabling it" ); - } + logger.debug("IntegrityMonitor.executeStateAudit(): resource = {}, FPC is stale. Disabling it" ); EntityTransaction et = em.getTransaction(); et.begin(); StateManagementEntity sme = null; @@ -1744,13 +1624,13 @@ public class IntegrityMonitor { String msg = "IntegrityMonitor.executeStateAudit(): " + fpe.getResourceName() + ": resource not found in state management entity database table"; logger.error("{}", msg); } - synchronized(IMFLUSHLOCK){ + synchronized(imFlushLock){ et.commit(); } } catch (Exception e) { // log an error logger.error("IntegrityMonitor.executeStateAudit(): {}: StateManagementEntity DB read failed with exception: ", fpe.getResourceName(), e); - synchronized(IMFLUSHLOCK){ + synchronized(imFlushLock){ if(et.isActive()){ et.rollback(); } @@ -1770,25 +1650,19 @@ public class IntegrityMonitor { } }// end if(diffMs > staleMs) }// end for(ForwardProgressEntity fpe : fpList) - if(logger.isDebugEnabled()){ - logger.debug("IntegrityMonitor.executeStateAudit(): exit"); - } + logger.debug("IntegrityMonitor.executeStateAudit(): exit"); } /** * Execute a test transaction when test transaction interval has elapsed. */ private void checkTestTransaction() { - if(logger.isDebugEnabled()){ - logger.debug("checkTestTransaction(): entry"); - } + logger.debug("checkTestTransaction(): entry"); synchronized (checkTestTransactionLock) { // test transaction timer checks if (testTransInterval <= 0) { - if(logger.isDebugEnabled()){ - logger.debug("checkTestTransaction(): disabled"); - } + logger.debug("checkTestTransaction(): disabled"); elapsedTestTransTime = 0; return; // test transaction is disabled } @@ -1804,25 +1678,19 @@ public class IntegrityMonitor { // execute test transaction testTransaction(); } - if(logger.isDebugEnabled()){ - logger.debug("checkTestTransaction(): exit"); - } + logger.debug("checkTestTransaction(): exit"); } /** * Updates Fpc counter in database when write Fpc interval has elapsed. */ private void checkWriteFpc() { - if(logger.isDebugEnabled()){ - logger.debug("checkWriteFpc(): entry"); - } + logger.debug("checkWriteFpc(): entry"); synchronized (checkWriteFpcLock) { // test transaction timer checks if (writeFpcInterval <= 0) { - if(logger.isDebugEnabled()){ - logger.debug("checkWriteFpc(): disabled"); - } + logger.debug("checkWriteFpc(): disabled"); elapsedWriteFpcTime = 0; return; // write Fpc is disabled } @@ -1842,9 +1710,7 @@ public class IntegrityMonitor { logger.error("IntegrityMonitor threw exception.", e); } } - if(logger.isDebugEnabled()){ - logger.debug("checkWriteFpc(): exit"); - } + logger.debug("checkWriteFpc(): exit"); } /** @@ -1852,30 +1718,22 @@ public class IntegrityMonitor { * resource's state. */ private void checkDependentHealth() { - if (logger.isDebugEnabled()) { - logger.debug("checkDependentHealth: entry"); - } + logger.debug("checkDependentHealth: entry"); if (checkDependencyInterval <=0) { - if (logger.isDebugEnabled()) { - logger.debug("checkDependentHealth: disabled"); - } + logger.debug("checkDependentHealth: disabled"); return; // dependency monitoring is disabled } long currTime = System.currentTimeMillis(); - if (logger.isDebugEnabled()) { - logger.debug( - "checkDependentHealth currTime - lastDependencyCheckTime = {}", - (currTime - lastDependencyCheckTime)); - } - if ((currTime - lastDependencyCheckTime) > (1000 * checkDependencyInterval)) { + logger.debug( + "checkDependentHealth currTime - lastDependencyCheckTime = {}", + currTime - lastDependencyCheckTime); + if ((currTime - lastDependencyCheckTime) > (1000L * checkDependencyInterval)) { // execute dependency check and update this resource's state dependencyCheck(); } - if (logger.isDebugEnabled()) { - logger.debug("checkDependentHealth: exit"); - } + logger.debug("checkDependentHealth: exit"); } /* @@ -1889,49 +1747,32 @@ public class IntegrityMonitor { * of the state and send a notification to all registered observers. */ private void refreshStateAudit() { - if(logger.isDebugEnabled()){ - logger.debug("refreshStateAudit(): entry"); - } + logger.debug("refreshStateAudit(): entry"); if (refreshStateAuditIntervalMs <= 0) { // The audit is disabled - if(logger.isDebugEnabled()){ - logger.debug("refreshStateAudit(): disabled"); - } + logger.debug("refreshStateAudit(): disabled"); return; } executeRefreshStateAudit(); - if(logger.isDebugEnabled()){ - logger.debug("refreshStateAudit(): exit"); - } + logger.debug("refreshStateAudit(): exit"); } public void executeRefreshStateAudit(){ - if(logger.isDebugEnabled()){ - logger.debug("executeRefreshStateAudit(): entry"); - } + logger.debug("executeRefreshStateAudit(): entry"); synchronized (refreshStateAuditLock) { - if (logger.isDebugEnabled()) { - logger.debug("refreshStateAudit: entry"); - } + logger.debug("refreshStateAudit: entry"); Date now = new Date(); long nowMs = now.getTime(); long lastTimeMs = refreshStateAuditLastRunDate.getTime(); - if (logger.isDebugEnabled()) { - logger.debug("refreshStateAudit: ms since last run = {}", - (nowMs - lastTimeMs)); - } + logger.debug("refreshStateAudit: ms since last run = {}", + nowMs - lastTimeMs); if ((nowMs - lastTimeMs) > refreshStateAuditIntervalMs) { String adminState = stateManager.getAdminState(); - if (logger.isDebugEnabled()) { - logger.debug("refreshStateAudit: adminState = {}", - adminState); - } + logger.debug("refreshStateAudit: adminState = {}", adminState); if (adminState.equals(StateManagement.LOCKED)) { try { - if (logger.isDebugEnabled()) { - logger.debug("refreshStateAudit: calling lock()"); - } + logger.debug("refreshStateAudit: calling lock()"); stateManager.lock(); } catch (Exception e) { logger.error( @@ -1940,11 +1781,8 @@ public class IntegrityMonitor { } } else {// unlocked try { - if (logger.isDebugEnabled()) { - logger.debug("refreshStateAudit: calling unlock()"); - } + logger.debug("refreshStateAudit: calling unlock()"); stateManager.unlock(); - ; } catch (Exception e) { logger.error( "refreshStateAudit: caught unexpected exception from stateManager.unlock(): ", @@ -1952,14 +1790,10 @@ public class IntegrityMonitor { } } refreshStateAuditLastRunDate = new Date(); - if (logger.isDebugEnabled()) { - logger.debug("refreshStateAudit: exit"); - } + logger.debug("refreshStateAudit: exit"); } } - if(logger.isDebugEnabled()){ - logger.debug("executeRefreshStateAudit(): exit"); - } + logger.debug("executeRefreshStateAudit(): exit"); } public static boolean isUnitTesting() { @@ -1988,55 +1822,39 @@ public class IntegrityMonitor { @Override public void run() { - if (logger.isDebugEnabled()) { - logger.debug("FPManager thread running"); - } + logger.debug("FPManager thread running"); while (!exit) { try { Thread.sleep(CYCLE_INTERVAL_MILLIS); } catch (InterruptedException e) { // The 'sleep' call was interrupted - if (logger.isDebugEnabled()) { - logger.debug("IntegrityMonitor threw exception.", e); - } + logger.debug("IntegrityMonitor threw exception.", e); Thread.currentThread().interrupt(); continue; } try { - if (logger.isDebugEnabled()) { - logger.debug("FPManager calling fpMonitorCycle()"); - } + logger.debug("FPManager calling fpMonitorCycle()"); // check forward progress timer IntegrityMonitor.this.fpMonitorCycle(); - if (logger.isDebugEnabled()) { - logger.debug("FPManager calling checkTestTransaction()"); - } + logger.debug("FPManager calling checkTestTransaction()"); // check test transaction timer IntegrityMonitor.this.checkTestTransaction(); - if (logger.isDebugEnabled()) { - logger.debug("FPManager calling checkWriteFpc()"); - } + logger.debug("FPManager calling checkWriteFpc()"); // check write Fpc timer IntegrityMonitor.this.checkWriteFpc(); - if (logger.isDebugEnabled()) { - logger.debug("FPManager calling checkDependentHealth()"); - } + logger.debug("FPManager calling checkDependentHealth()"); // check dependency health IntegrityMonitor.this.checkDependentHealth(); - if (logger.isDebugEnabled()) { - logger.debug("FPManager calling refreshStateAudit()"); - } + logger.debug("FPManager calling refreshStateAudit()"); // check if it is time to run the refreshStateAudit IntegrityMonitor.this.refreshStateAudit(); - if (logger.isDebugEnabled()) { - logger.debug("FPManager calling stateAudit()"); - } + logger.debug("FPManager calling stateAudit()"); // check if it is time to run the stateAudit IntegrityMonitor.this.stateAudit(); @@ -2057,11 +1875,9 @@ public class IntegrityMonitor { } public void allSeemsWell(@NotNull String key, @NotNull Boolean asw, @NotNull String msg) - throws IllegalArgumentException, AllSeemsWellException { + throws AllSeemsWellException { - if(logger.isDebugEnabled()){ - logger.debug("allSeemsWell entry: key = {}, asw = {}, msg = {}", key, asw, msg); - } + logger.debug("allSeemsWell entry: key = {}, asw = {}, msg = {}", key, asw, msg); if(key == null || key.isEmpty()){ logger.error("allSeemsWell: 'key' has no visible content"); throw new IllegalArgumentException("allSeemsWell: 'key' has no visible content"); @@ -2125,11 +1941,11 @@ public class IntegrityMonitor { } if(logger.isDebugEnabled()){ - for(String mykey: allSeemsWellMap.keySet()){ - logger.debug("allSeemsWellMap: key = {} msg = {}", mykey, allSeemsWellMap.get(mykey)); + for(Entry ent: allSeemsWellMap.entrySet()) { + logger.debug("allSeemsWellMap: key = {} msg = {}", ent.getKey(), ent.getValue()); } - for(String mykey: allNotWellMap.keySet()){ - logger.debug("allNotWellMap: key = {} msg = {}", mykey, allNotWellMap.get(mykey)); + for(Entry ent: allNotWellMap.entrySet()) { + logger.debug("allNotWellMap: key = {} msg = {}", ent.getKey(), ent.getValue()); } logger.debug("allSeemsWell exit"); } diff --git a/integrity-monitor/src/main/java/org/onap/policy/common/im/jmx/ComponentAdmin.java b/integrity-monitor/src/main/java/org/onap/policy/common/im/jmx/ComponentAdmin.java index c9b1c1df..a18b1434 100644 --- a/integrity-monitor/src/main/java/org/onap/policy/common/im/jmx/ComponentAdmin.java +++ b/integrity-monitor/src/main/java/org/onap/policy/common/im/jmx/ComponentAdmin.java @@ -42,6 +42,8 @@ import org.onap.policy.common.im.StateManagement; * Base class for component MBeans. */ public class ComponentAdmin implements ComponentAdminMBean { + private static final String STATE_MANAGER = "stateManager"; + private static final Logger logger = LoggerFactory.getLogger(ComponentAdmin.class.getName()); private final String name; @@ -55,12 +57,12 @@ public class ComponentAdmin implements ComponentAdminMBean { * @param name the MBean name * @param integrityMonitor * @param stateManager - * @throws Exception + * @throws ComponentAdminException */ - public ComponentAdmin(String name, IntegrityMonitor integrityMonitor, StateManagement stateManager) throws Exception { + public ComponentAdmin(String name, IntegrityMonitor integrityMonitor, StateManagement stateManager) throws ComponentAdminException { if ((name == null) || (integrityMonitor == null) || (stateManager == null)) { logger.error("Error: ComponentAdmin constructor called with invalid input"); - throw new NullPointerException("null input"); + throw new ComponentAdminException("null input"); } this.name = "ONAP_POLICY_COMP:name=" + name; @@ -69,50 +71,41 @@ public class ComponentAdmin implements ComponentAdminMBean { try { register(); - } catch (Exception e) { - if(logger.isDebugEnabled()){ - logger.debug("Failed to register ComponentAdmin MBean"); - } + } catch (ComponentAdminException e) { + logger.debug("Failed to register ComponentAdmin MBean"); throw e; } } /** * Registers with the MBean server. - * @throws MalformedObjectNameException a JMX exception - * @throws InstanceNotFoundException a JMX exception - * @throws MBeanRegistrationException a JMX exception - * @throws NotCompliantMBeanException a JMX exception - * @throws InstanceAlreadyExistsException a JMX exception + * @throws ComponentAdminException a JMX exception */ - public synchronized void register() throws MalformedObjectNameException, - MBeanRegistrationException, InstanceNotFoundException, - InstanceAlreadyExistsException, NotCompliantMBeanException { + public synchronized void register() throws ComponentAdminException { - - if(logger.isDebugEnabled()){ + try { logger.debug("Registering {} MBean", name); - } - - MBeanServer mbeanServer = findMBeanServer(); + MBeanServer mbeanServer = findMBeanServer(); - if (mbeanServer == null) { - return; - } + if (mbeanServer == null) { + return; + } - ObjectName objectName = new ObjectName(name); + ObjectName objectName = new ObjectName(name); - if (mbeanServer.isRegistered(objectName)) { - if(logger.isDebugEnabled()){ + if (mbeanServer.isRegistered(objectName)) { logger.debug("Unregistering a previously registered {} MBean", name); + mbeanServer.unregisterMBean(objectName); } - mbeanServer.unregisterMBean(objectName); - } - mbeanServer.registerMBean(this, objectName); - registeredMBeanServer = mbeanServer; - registeredObjectName = objectName; + mbeanServer.registerMBean(this, objectName); + registeredMBeanServer = mbeanServer; + registeredObjectName = objectName; + + } catch (MalformedObjectNameException | MBeanRegistrationException | InstanceNotFoundException | InstanceAlreadyExistsException | NotCompliantMBeanException e) { + throw new ComponentAdminException(e); + } } /** @@ -125,18 +118,22 @@ public class ComponentAdmin implements ComponentAdminMBean { /** * Unregisters with the MBean server. - * @throws InstanceNotFoundException a JMX exception - * @throws MBeanRegistrationException a JMX exception + * @throws ComponentAdminException a JMX exception */ - public synchronized void unregister() throws MBeanRegistrationException, - InstanceNotFoundException { + public synchronized void unregister() throws ComponentAdminException { if (registeredObjectName == null) { return; } - registeredMBeanServer.unregisterMBean(registeredObjectName); + try { + registeredMBeanServer.unregisterMBean(registeredObjectName); + + } catch (MBeanRegistrationException | InstanceNotFoundException e) { + throw new ComponentAdminException(e); + } + registeredMBeanServer = null; registeredObjectName = null; } @@ -192,44 +189,38 @@ public class ComponentAdmin implements ComponentAdminMBean { @Override public void test() throws Exception { // Call evaluateSanity on IntegrityMonitor to run the test - if(logger.isDebugEnabled()){ - logger.debug("test() called..."); - } + logger.debug("test() called..."); if (integrityMonitor != null) { integrityMonitor.evaluateSanity(); } else { logger.error("Unable to invoke test() - state manager instance is null"); - throw new NullPointerException("stateManager"); + throw new ComponentAdminException(STATE_MANAGER); } } @Override public void lock() throws Exception { - if(logger.isDebugEnabled()){ - logger.debug("lock() called..."); - } + logger.debug("lock() called..."); if (stateManager != null) { stateManager.lock(); } else { logger.error("Unable to invoke lock() - state manager instance is null"); - throw new NullPointerException("stateManager"); + throw new ComponentAdminException(STATE_MANAGER); } } @Override public void unlock() throws Exception { - if(logger.isDebugEnabled()){ - logger.debug("unlock() called..."); - } + logger.debug("unlock() called..."); if (stateManager != null) { stateManager.unlock(); } else { logger.error("Unable to invoke unlock() - state manager instance is null"); - throw new NullPointerException("stateManager"); + throw new ComponentAdminException(STATE_MANAGER); } } diff --git a/integrity-monitor/src/main/java/org/onap/policy/common/im/jmx/ComponentAdminException.java b/integrity-monitor/src/main/java/org/onap/policy/common/im/jmx/ComponentAdminException.java new file mode 100644 index 00000000..e98288eb --- /dev/null +++ b/integrity-monitor/src/main/java/org/onap/policy/common/im/jmx/ComponentAdminException.java @@ -0,0 +1,42 @@ +/* + * ============LICENSE_START======================================================= + * Integrity Audit + * ================================================================================ + * Copyright (C) 2018 AT&T Intellectual Property. 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.common.im.jmx; + +public class ComponentAdminException extends Exception { + private static final long serialVersionUID = 1L; + + public ComponentAdminException() { + super(); + } + + public ComponentAdminException(String message) { + super(message); + } + + public ComponentAdminException(Throwable cause) { + super(cause); + } + + public ComponentAdminException(String message, Throwable cause) { + super(message, cause); + } + +} diff --git a/integrity-monitor/src/test/java/org/onap/policy/common/im/test/IntegrityMonitorTest.java b/integrity-monitor/src/test/java/org/onap/policy/common/im/test/IntegrityMonitorTest.java index 563c5d55..1efc90cc 100644 --- a/integrity-monitor/src/test/java/org/onap/policy/common/im/test/IntegrityMonitorTest.java +++ b/integrity-monitor/src/test/java/org/onap/policy/common/im/test/IntegrityMonitorTest.java @@ -20,9 +20,10 @@ package org.onap.policy.common.im.test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; -import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Properties; @@ -38,7 +39,6 @@ import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; -import org.junit.Ignore; import org.junit.Test; import org.onap.policy.common.im.IntegrityMonitor; import org.onap.policy.common.im.IntegrityMonitorProperties; @@ -883,7 +883,7 @@ public class IntegrityMonitorTest { et.commit(); logger.debug("\nIntegrityMonitorTest:testGetAllForwardProgressEntity Calling im.getAllForwardProgressEntity()\n\n"); - ArrayList fpeList = im.getAllForwardProgressEntity(); + List fpeList = im.getAllForwardProgressEntity(); assertTrue(fpeList.size()==4); @@ -919,8 +919,6 @@ public class IntegrityMonitorTest { IntegrityMonitor im = IntegrityMonitor.getInstance(resourceName, myProp); - StateManagement sm = im.getStateManager(); - logger.debug("\nIntegrityMonitorTest: Creating ForwardProgressEntity entries\n\n"); // Add resources to put an entry in the forward progress table Date staleDate = new Date(0); @@ -975,7 +973,7 @@ public class IntegrityMonitorTest { et.commit(); logger.debug("\nIntegrityMonitorTest:testStateAudit Calling im.getAllForwardProgressEntity()\n\n"); - ArrayList fpeList = im.getAllForwardProgressEntity(); + List fpeList = im.getAllForwardProgressEntity(); logger.debug("\n\n"); logger.debug("IntegrityMonitorTest:testStateAudit:ForwardProgressEntity entries"); -- cgit 1.2.3-korg