aboutsummaryrefslogtreecommitdiffstats
path: root/integrity-monitor/src/main/java/org/onap/policy/common/im/StateManagement.java
diff options
context:
space:
mode:
Diffstat (limited to 'integrity-monitor/src/main/java/org/onap/policy/common/im/StateManagement.java')
-rw-r--r--integrity-monitor/src/main/java/org/onap/policy/common/im/StateManagement.java712
1 files changed, 136 insertions, 576 deletions
diff --git a/integrity-monitor/src/main/java/org/onap/policy/common/im/StateManagement.java b/integrity-monitor/src/main/java/org/onap/policy/common/im/StateManagement.java
index c5f9d7bc..575f8d01 100644
--- a/integrity-monitor/src/main/java/org/onap/policy/common/im/StateManagement.java
+++ b/integrity-monitor/src/main/java/org/onap/policy/common/im/StateManagement.java
@@ -22,6 +22,8 @@ package org.onap.policy.common.im;
import java.util.List;
import java.util.Observable;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Consumer;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.FlushModeType;
@@ -103,44 +105,14 @@ public class StateManagement extends Observable {
public StateManagement(final EntityManagerFactory entityManagerFactory, final String resourceName)
throws StateManagementException {
emf = entityManagerFactory;
- if (logger.isDebugEnabled()) {
- logger.debug("StateManagement: constructor, resourceName: {}", resourceName);
- }
-
- final EntityManager em = emf.createEntityManager();
- try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
-
- this.resourceName = resourceName;
- if (logger.isDebugEnabled()) {
- logger.debug("resourceName = {}", this.resourceName);
- }
-
-
- try {
- // Create a StateManagementEntity object
- if (logger.isDebugEnabled()) {
- logger.debug(FIND_MESSAGE, this.resourceName);
- }
- final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName);
+ logger.debug("StateManagement: constructor, resourceName: {}", resourceName);
- // persist the administrative state
- if (logger.isDebugEnabled()) {
- logger.debug("Persist adminstrative state, resourceName = {}", this.resourceName);
- }
- em.persist(sm);
- et.commit();
+ this.resourceName = resourceName;
- // Load the StateTransition hash table
- st = new StateTransition();
+ setState("StateManagement", this.resourceName, sm -> null);
- if (logger.isDebugEnabled()) {
- logger.debug("StateManagement: constructor end, resourceName: {}", this.resourceName);
- }
- } catch (final Exception ex) {
- logger.error("StateManagement: constructor caught unexpected exception: ", ex);
- throw new StateManagementException("StateManagement: Exception: " + ex.toString(), ex);
- }
- }
+ // Load the StateTransition hash table
+ st = new StateTransition();
}
/**
@@ -150,84 +122,81 @@ public class StateManagement extends Observable {
* and the owning application will set the StandbyStatus.
*/
public void initializeState() throws StateManagementException {
+ setState("initializeState", this.resourceName, sm -> {
+ sm.setAdminState(sm.getAdminState()); // preserve the Admin state
+ sm.setOpState(StateManagement.ENABLED);
+ sm.setAvailStatus(StateManagement.NULL_VALUE);
+ sm.setStandbyStatus(StateManagement.NULL_VALUE);
+ return ADMIN_STATE;
+ });
+ }
+
+ /**
+ * Sets the management entity state.
+ *
+ * @param methodName name of the method that invoked this
+ * @param resourceName resource name of the desired entity
+ * @param updateState function to update the state; returns a string indicating which item
+ * was updated, {@code null} if no change was made
+ * @throws StateManagementException if an error occurs
+ */
+ private void setState(String methodName, String resourceName, ExFunction<StateManagementEntity,String> updateState)
+ throws StateManagementException {
+
synchronized (SYNCLOCK) {
- if (logger.isDebugEnabled()) {
- logger.debug("\nStateManagement: SYNCLOCK initializeState() operation for resourceName = {}\n",
- this.resourceName);
- logger.debug("StateManagement: initializeState() operation started, resourceName = {}",
- this.resourceName);
- }
+ logger.debug("\nStateManagement: SYNCLOCK {}() operation for resourceName = {}\n", methodName,
+ resourceName);
+ logger.debug("StateManagement: {}() operation started, resourceName = {}", methodName, resourceName);
+
final EntityManager em = emf.createEntityManager();
try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
- if (logger.isDebugEnabled()) {
- logger.debug(FIND_MESSAGE, this.resourceName);
- }
- final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName);
- // set state
- sm.setAdminState(sm.getAdminState()); // preserve the Admin state
- sm.setOpState(StateManagement.ENABLED);
- sm.setAvailStatus(StateManagement.NULL_VALUE);
- sm.setStandbyStatus(StateManagement.NULL_VALUE);
+ logger.debug(FIND_MESSAGE, resourceName);
+
+ final StateManagementEntity sm = findStateManagementEntity(em, resourceName);
+ String changed = updateState.update(sm);
em.persist(sm);
et.commit();
- setChanged();
- notifyObservers(ADMIN_STATE);
- if (logger.isDebugEnabled()) {
- logger.debug("StateManagement: initializeState() operation completed, resourceName = {}",
- this.resourceName);
+ if (changed != null) {
+ setChanged();
+ notifyObservers(changed);
}
+
+ logger.debug("StateManagement: {}() operation completed, resourceName = {}",
+ methodName, resourceName);
} catch (final Exception ex) {
- logger.error("StateManagement.initializeState() caught unexpected exception: ", ex);
- throw new StateManagementException("StateManagement.initializeState() Exception: " + ex);
+ logger.error("StateManagement.{}() caught unexpected exception: ", methodName, ex);
+ throw new StateManagementException("StateManagement." + methodName + "() Exception: " + ex);
}
}
}
+ private void setStateUsingTable(String actionName, String resourceName, String changeName)
+ throws StateManagementException {
+
+ setState(actionName, resourceName, sm -> {
+ final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(),
+ sm.getAvailStatus(), sm.getStandbyStatus(), actionName);
+
+ sm.setAdminState(stateElement.getEndingAdminState());
+ sm.setOpState(stateElement.getEndingOpState());
+ sm.setAvailStatus(stateElement.getEndingAvailStatus());
+ sm.setStandbyStatus(stateElement.getEndingStandbyStatus());
+
+ return changeName;
+ });
+ }
+
/**
* lock() changes the administrative state to locked.
*
* @throws StateManagementException if an error occurs
*/
public void lock() throws StateManagementException {
- synchronized (SYNCLOCK) {
- if (logger.isDebugEnabled()) {
- logger.debug("\nStateManagement: SYNCLOCK lock() operation for resourceName = {}\n", this.resourceName);
- logger.debug("StateManagement: lock() operation started, resourceName = {}", this.resourceName);
- }
- final EntityManager em = emf.createEntityManager();
-
- try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
-
- if (logger.isDebugEnabled()) {
- logger.debug(FIND_MESSAGE, this.resourceName);
- }
- final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName);
-
- final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(),
- sm.getAvailStatus(), sm.getStandbyStatus(), LOCK);
-
- sm.setAdminState(stateElement.getEndingAdminState());
- sm.setOpState(stateElement.getEndingOpState());
- sm.setAvailStatus(stateElement.getEndingAvailStatus());
- sm.setStandbyStatus(stateElement.getEndingStandbyStatus());
-
- em.persist(sm);
- et.commit();
- setChanged();
- notifyObservers(ADMIN_STATE);
-
- if (logger.isDebugEnabled()) {
- logger.debug("StateManagement: lock() operation completed, resourceName = {}", this.resourceName);
- }
- } catch (final Exception ex) {
- logger.error("StateManagement.lock() caught unexpected exception: ", ex);
- throw new StateManagementException("StateManagement.lock() Exception: " + ex.toString());
- }
- }
+ setStateUsingTable(LOCK, this.resourceName, ADMIN_STATE);
}
/**
@@ -236,41 +205,7 @@ public class StateManagement extends Observable {
* @throws StateManagementException if an error occurs
*/
public void unlock() throws StateManagementException {
- synchronized (SYNCLOCK) {
- if (logger.isDebugEnabled()) {
- logger.debug("\nStateManagement: SYNCLOCK unlock() operation for resourceName = {}\n",
- this.resourceName);
- logger.debug("StateManagement: unlock() operation started, resourceName = {}", this.resourceName);
- }
- final EntityManager em = emf.createEntityManager();
-
- try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
-
- if (logger.isDebugEnabled()) {
- logger.debug(FIND_MESSAGE, this.resourceName);
- }
- final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName);
- final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(),
- sm.getAvailStatus(), sm.getStandbyStatus(), UNLOCK);
- // set transition state
- sm.setAdminState(stateElement.getEndingAdminState());
- sm.setOpState(stateElement.getEndingOpState());
- sm.setAvailStatus(stateElement.getEndingAvailStatus());
- sm.setStandbyStatus(stateElement.getEndingStandbyStatus());
-
- em.persist(sm);
- et.commit();
- setChanged();
- notifyObservers(ADMIN_STATE);
-
- if (logger.isDebugEnabled()) {
- logger.debug("StateManagement: unlock() operation completed, resourceName = {}", this.resourceName);
- }
- } catch (final Exception ex) {
- logger.error("StateManagement.unlock() caught unexpected exception: ", ex);
- throw new StateManagementException("StateManagement.unlock() Exception: " + ex);
- }
- }
+ setStateUsingTable(UNLOCK, this.resourceName, ADMIN_STATE);
}
/**
@@ -280,44 +215,7 @@ public class StateManagement extends Observable {
* @throws StateManagementException if an error occurs
*/
public void enableNotFailed() throws StateManagementException {
- synchronized (SYNCLOCK) {
- if (logger.isDebugEnabled()) {
- logger.debug("\nStateManagement: SYNCLOCK enabledNotFailed() operation for resourceName = {}\n",
- this.resourceName);
- logger.debug("StateManagement: enableNotFailed() operation started, resourceName = {}",
- this.resourceName);
- }
- final EntityManager em = emf.createEntityManager();
-
- try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
-
- if (logger.isDebugEnabled()) {
- logger.debug(FIND_MESSAGE, this.resourceName);
- }
- final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName);
- final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(),
- sm.getAvailStatus(), sm.getStandbyStatus(), ENABLE_NOT_FAILED);
- // set transition state
- sm.setAdminState(stateElement.getEndingAdminState());
- sm.setOpState(stateElement.getEndingOpState());
- sm.setAvailStatus(stateElement.getEndingAvailStatus());
- sm.setStandbyStatus(stateElement.getEndingStandbyStatus());
-
- em.persist(sm);
- et.commit();
-
- setChanged();
- notifyObservers(OPERATION_STATE);
-
- if (logger.isDebugEnabled()) {
- logger.debug("StateManagement enableNotFailed() operation completed, resourceName = {}",
- this.resourceName);
- }
- } catch (final Exception ex) {
- logger.error("StateManagement.enableNotFailed() caught unexpected exception: ", ex);
- throw new StateManagementException("StateManagement.enableNotFailed() Exception: " + ex);
- }
- }
+ setStateUsingTable(ENABLE_NOT_FAILED, this.resourceName, OPERATION_STATE);
}
/**
@@ -327,43 +225,7 @@ public class StateManagement extends Observable {
* @throws StateManagementException if an error occurs
*/
public void disableFailed() throws StateManagementException {
- synchronized (SYNCLOCK) {
- if (logger.isDebugEnabled()) {
- logger.debug("\nStateManagement: SYNCLOCK disabledFailed() operation for resourceName = {}\n",
- this.resourceName);
- logger.debug("StateManagement: disableFailed() operation started, resourceName = {}",
- this.resourceName);
- }
- final EntityManager em = emf.createEntityManager();
-
- try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
-
- if (logger.isDebugEnabled()) {
- logger.debug(FIND_MESSAGE, this.resourceName);
- }
- final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName);
- final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(),
- sm.getAvailStatus(), sm.getStandbyStatus(), DISABLE_FAILED);
- // set transition state
- sm.setAdminState(stateElement.getEndingAdminState());
- sm.setOpState(stateElement.getEndingOpState());
- sm.setAvailStatus(stateElement.getEndingAvailStatus());
- sm.setStandbyStatus(stateElement.getEndingStandbyStatus());
-
- em.persist(sm);
- et.commit();
- setChanged();
- notifyObservers(OPERATION_STATE);
-
- if (logger.isDebugEnabled()) {
- logger.debug("StateManagement: disableFailed() operation completed, resourceName = {}",
- this.resourceName);
- }
- } catch (final Exception ex) {
- logger.error("StateManagement.disableFailed() caught unexpected exception: ", ex);
- throw new StateManagementException("StateManagement.disableFailed() Exception: " + ex);
- }
- }
+ setStateUsingTable(DISABLE_FAILED, this.resourceName, OPERATION_STATE);
}
/**
@@ -373,49 +235,13 @@ public class StateManagement extends Observable {
* @throws StateManagementException if an error occurs
*/
public void disableFailed(final String otherResourceName) throws StateManagementException {
- synchronized (SYNCLOCK) {
- if (otherResourceName == null) {
- logger.error("\nStateManagement: SYNCLOCK disableFailed(otherResourceName) operation: resourceName is "
- + "NULL.\n");
- return;
- }
- if (logger.isDebugEnabled()) {
- logger.debug("\nStateManagement: SYNCLOCK disabledFailed(otherResourceName) operation for resourceName "
- + "= {}\n", otherResourceName);
- logger.debug("StateManagement: disableFailed(otherResourceName) operation started, resourceName = {}",
- otherResourceName);
- }
- final EntityManager em = emf.createEntityManager();
-
- try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
-
- if (logger.isDebugEnabled()) {
- logger.debug(FIND_MESSAGE, otherResourceName);
- }
- final StateManagementEntity sm = findStateManagementEntity(em, otherResourceName);
- final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(),
- sm.getAvailStatus(), sm.getStandbyStatus(), DISABLE_FAILED);
- // set transition state
- sm.setAdminState(stateElement.getEndingAdminState());
- sm.setOpState(stateElement.getEndingOpState());
- sm.setAvailStatus(stateElement.getEndingAvailStatus());
- sm.setStandbyStatus(stateElement.getEndingStandbyStatus());
-
- em.persist(sm);
- et.commit();
- setChanged();
- notifyObservers(OPERATION_STATE);
-
- if (logger.isDebugEnabled()) {
- logger.debug(
- "StateManagement: disableFailed(otherResourceName) operation completed, resourceName = {}",
- otherResourceName);
- }
- } catch (final Exception ex) {
- logger.error("StateManagement.disableFailed(otherResourceName) caught unexpected exception: ", ex);
- throw new StateManagementException("StateManagement.disableFailed(otherResourceName) Exception: " + ex);
- }
+ if (otherResourceName == null) {
+ logger.error(
+ "\nStateManagement: SYNCLOCK disableFailed(otherResourceName) operation: resourceName is NULL.\n");
+ return;
}
+
+ setStateUsingTable(DISABLE_FAILED, otherResourceName, OPERATION_STATE);
}
/**
@@ -425,43 +251,7 @@ public class StateManagement extends Observable {
* @throws StateManagementException if an error occurs
*/
public void disableDependency() throws StateManagementException {
- synchronized (SYNCLOCK) {
- if (logger.isDebugEnabled()) {
- logger.debug("\nStateManagement: SYNCLOCK disableDependency() operation for resourceName = {}\n",
- this.resourceName);
- logger.debug("StateManagement: disableDependency() operation started, resourceName = {}",
- this.resourceName);
- }
- final EntityManager em = emf.createEntityManager();
-
- try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
-
- if (logger.isDebugEnabled()) {
- logger.debug(FIND_MESSAGE, this.resourceName);
- }
- final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName);
- final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(),
- sm.getAvailStatus(), sm.getStandbyStatus(), DISABLE_DEPENDENCY);
- // set transition state
- sm.setAdminState(stateElement.getEndingAdminState());
- sm.setOpState(stateElement.getEndingOpState());
- sm.setAvailStatus(stateElement.getEndingAvailStatus());
- sm.setStandbyStatus(stateElement.getEndingStandbyStatus());
-
- em.persist(sm);
- et.commit();
- setChanged();
- notifyObservers(OPERATION_STATE);
-
- if (logger.isDebugEnabled()) {
- logger.debug("StateManagement: disableDependency() operation completed, resourceName = {}",
- this.resourceName);
- }
- } catch (final Exception ex) {
- logger.error("StateManagement.disableDependency() caught unexpected exception: ", ex);
- throw new StateManagementException("StateManagement.disableDependency() Exception: " + ex);
- }
- }
+ setStateUsingTable(DISABLE_DEPENDENCY, this.resourceName, OPERATION_STATE);
}
/**
@@ -471,43 +261,7 @@ public class StateManagement extends Observable {
* @throws StateManagementException if an error occurs
*/
public void enableNoDependency() throws StateManagementException {
- synchronized (SYNCLOCK) {
- if (logger.isDebugEnabled()) {
- logger.debug("\nStateManagement: SYNCLOCK enableNoDependency() operation for resourceName = {}\n",
- this.resourceName);
- logger.debug("StateManagement: enableNoDependency() operation started, resourceName = {}",
- this.resourceName);
- }
- final EntityManager em = emf.createEntityManager();
-
- try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
-
- if (logger.isDebugEnabled()) {
- logger.debug(FIND_MESSAGE, this.resourceName);
- }
- final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName);
- final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(),
- sm.getAvailStatus(), sm.getStandbyStatus(), ENABLE_NO_DEPENDENCY);
- // set transition state
- sm.setAdminState(stateElement.getEndingAdminState());
- sm.setOpState(stateElement.getEndingOpState());
- sm.setAvailStatus(stateElement.getEndingAvailStatus());
- sm.setStandbyStatus(stateElement.getEndingStandbyStatus());
-
- em.persist(sm);
- et.commit();
- setChanged();
- notifyObservers(OPERATION_STATE);
-
- if (logger.isDebugEnabled()) {
- logger.debug("StateManagement: enableNoDependency() operation completed, resourceName = {}",
- this.resourceName);
- }
- } catch (final Exception ex) {
- logger.error("StateManagement.enableNoDependency() caught unexpected exception: ", ex);
- throw new StateManagementException("StateManagement.enableNoDependency() Exception: " + ex);
- }
- }
+ setStateUsingTable(ENABLE_NO_DEPENDENCY, this.resourceName, OPERATION_STATE);
}
/**
@@ -516,48 +270,26 @@ public class StateManagement extends Observable {
* @throws IntegrityMonitorException if the status fails to change
*/
public void promote() throws IntegrityMonitorException {
- synchronized (SYNCLOCK) {
- if (logger.isDebugEnabled()) {
- logger.debug("\nStateManagement: SYNCLOCK promote() operation for resourceName = {}\n",
- this.resourceName);
- logger.debug("StateManagement: promote() operation started, resourceName = {}", this.resourceName);
- }
+ AtomicReference<String> newStatus = new AtomicReference<>();
- StateManagementEntity sm;
+ setState(PROMOTE, resourceName, sm -> {
+ final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(),
+ sm.getAvailStatus(), sm.getStandbyStatus(), PROMOTE);
- final EntityManager em = emf.createEntityManager();
+ sm.setAdminState(stateElement.getEndingAdminState());
+ sm.setOpState(stateElement.getEndingOpState());
+ sm.setAvailStatus(stateElement.getEndingAvailStatus());
+ sm.setStandbyStatus(stateElement.getEndingStandbyStatus());
- try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
-
- if (logger.isDebugEnabled()) {
- logger.debug(FIND_MESSAGE, this.resourceName);
- }
- sm = findStateManagementEntity(em, this.resourceName);
- final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(),
- sm.getAvailStatus(), sm.getStandbyStatus(), PROMOTE);
- // set transition state
- sm.setAdminState(stateElement.getEndingAdminState());
- sm.setOpState(stateElement.getEndingOpState());
- sm.setAvailStatus(stateElement.getEndingAvailStatus());
- sm.setStandbyStatus(stateElement.getEndingStandbyStatus());
+ newStatus.set(sm.getStandbyStatus());
- em.persist(sm);
- et.commit();
- setChanged();
- notifyObservers(STANDBY_STATUS);
- } catch (final Exception ex) {
- logger.error("StateManagement.promote() caught unexpected exception: ", ex);
- throw new StateManagementException("StateManagement.promote() Exception: " + ex);
- }
+ return STANDBY_STATUS;
+ });
- if (logger.isDebugEnabled()) {
- logger.debug("StateManagement: promote() operation completed, resourceName = {}", this.resourceName);
- }
- if (sm.getStandbyStatus().equals(StateManagement.COLD_STANDBY)) {
- final String msg =
- "Failure to promote " + this.resourceName + " StandbyStatus = " + StateManagement.COLD_STANDBY;
- throw new StandbyStatusException(msg);
- }
+ if (StateManagement.COLD_STANDBY.equals(newStatus.get())) {
+ final String msg =
+ "Failure to promote " + this.resourceName + " StandbyStatus = " + StateManagement.COLD_STANDBY;
+ throw new StandbyStatusException(msg);
}
}
@@ -567,42 +299,7 @@ public class StateManagement extends Observable {
* @throws StateManagementException if an error occurs
*/
public void demote() throws StateManagementException {
- synchronized (SYNCLOCK) {
- if (logger.isDebugEnabled()) {
- logger.debug("\nStateManagement: SYNCLOCK demote() operation for resourceName = {}\n",
- this.resourceName);
- logger.debug("StateManagement: demote() operation started, resourceName = {}",
- this.resourceName);
- }
- final EntityManager em = emf.createEntityManager();
-
- try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
-
- if (logger.isDebugEnabled()) {
- logger.debug(FIND_MESSAGE, this.resourceName);
- }
- final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName);
- final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(),
- sm.getAvailStatus(), sm.getStandbyStatus(), DEMOTE);
- // set transition state
- sm.setAdminState(stateElement.getEndingAdminState());
- sm.setOpState(stateElement.getEndingOpState());
- sm.setAvailStatus(stateElement.getEndingAvailStatus());
- sm.setStandbyStatus(stateElement.getEndingStandbyStatus());
-
- em.persist(sm);
- et.commit();
- setChanged();
- notifyObservers(STANDBY_STATUS);
-
- if (logger.isDebugEnabled()) {
- logger.debug("StateManagement: demote() operation completed, resourceName = {}", this.resourceName);
- }
- } catch (final Exception ex) {
- logger.error("StateManagement.demote() caught unexpected exception: ", ex);
- throw new StateManagementException("StateManagement.demote() Exception: " + ex);
- }
- }
+ setStateUsingTable(DEMOTE, this.resourceName, STANDBY_STATUS);
}
/**
@@ -615,46 +312,13 @@ public class StateManagement extends Observable {
* @throws StateManagementException if an error occurs
*/
public void demote(final String otherResourceName) throws StateManagementException {
- synchronized (SYNCLOCK) {
- if (otherResourceName == null) {
- logger.error(
- "\nStateManagement: SYNCLOCK demote(otherResourceName) operation: resourceName is NULL.\n");
- return;
- }
- if (logger.isDebugEnabled()) {
- logger.debug("\nStateManagement: SYNCLOCK demote(otherResourceName) operation for resourceName = {}\n",
- otherResourceName);
- }
- final EntityManager em = emf.createEntityManager();
-
- try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
-
- if (logger.isDebugEnabled()) {
- logger.debug("StateManagement: SYNCLOCK demote(otherResourceName) findStateManagementEntity for {}",
- otherResourceName);
- }
- final StateManagementEntity sm = findStateManagementEntity(em, otherResourceName);
- final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(),
- sm.getAvailStatus(), sm.getStandbyStatus(), DEMOTE);
- // set transition state
- sm.setAdminState(stateElement.getEndingAdminState());
- sm.setOpState(stateElement.getEndingOpState());
- sm.setAvailStatus(stateElement.getEndingAvailStatus());
- sm.setStandbyStatus(stateElement.getEndingStandbyStatus());
-
- em.persist(sm);
- et.commit();
- // We don't notify observers because this is assumed to be a remote resource
-
- if (logger.isDebugEnabled()) {
- logger.debug("StateManagement: demote(otherResourceName) operation completed, resourceName = {}",
- otherResourceName);
- }
- } catch (final Exception ex) {
- logger.error("StateManagement.demote(otherResourceName) caught unexpected exception: ", ex);
- throw new StateManagementException("StateManagement.demote(otherResourceName) Exception: " + ex);
- }
+ if (otherResourceName == null) {
+ logger.error(
+ "\nStateManagement: SYNCLOCK demote(otherResourceName) operation: resourceName is NULL.\n");
+ return;
}
+
+ setStateUsingTable(DEMOTE, otherResourceName, null);
}
/**
@@ -663,9 +327,16 @@ public class StateManagement extends Observable {
* @return the administration state
*/
public String getAdminState() {
- if (logger.isDebugEnabled()) {
- logger.debug("StateManagement(6/1/16): getAdminState for resourceName {}", this.resourceName);
- }
+ getEntityState("getAdminState", this.resourceName,
+ sm -> this.adminState = sm.getAdminState(),
+ () -> this.adminState = null);
+ return this.adminState;
+ }
+
+ private void getEntityState(String methodName, String resourceName, Consumer<StateManagementEntity> function,
+ Runnable notFound) {
+
+ logger.debug("StateManagement(6/1/16): {} for resourceName {}", methodName, resourceName);
final EntityManager em = emf.createEntityManager();
try (final EntityMgrCloser emc = new EntityMgrCloser(em)) {
@@ -682,15 +353,14 @@ public class StateManagement extends Observable {
final StateManagementEntity stateManagementEntity = resourceList.get(0);
// refresh the object from DB in case cached data was returned
em.refresh(stateManagementEntity);
- this.adminState = stateManagementEntity.getAdminState();
+ function.accept(stateManagementEntity);
} else {
- this.adminState = null;
+ notFound.run();
}
} catch (final Exception ex) {
- logger.error("StateManagement: getAdminState exception: {}", ex.toString(), ex);
+ logger.error("StateManagement: {} exception: {}", methodName, ex.toString(), ex);
}
- return this.adminState;
}
/**
@@ -699,33 +369,9 @@ public class StateManagement extends Observable {
* @return the operational state
*/
public String getOpState() {
- if (logger.isDebugEnabled()) {
- logger.debug("StateManagement(6/1/16): getOpState for resourceName {}", this.resourceName);
- }
-
- final EntityManager em = emf.createEntityManager();
- try (EntityMgrCloser emc = new EntityMgrCloser(em)) {
- final TypedQuery<StateManagementEntity> query =
- em.createQuery(GET_STATE_MANAGEMENT_ENTITY_QUERY, StateManagementEntity.class);
-
- query.setParameter(RESOURCE_NAME, this.resourceName);
-
- // Just test that we are retrieving the right object
- final List<StateManagementEntity> resourceList =
- query.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
- if (!resourceList.isEmpty()) {
- // exist
- final StateManagementEntity stateManagementEntity = resourceList.get(0);
- // refresh the object from DB in case cached data was returned
- em.refresh(stateManagementEntity);
- this.opState = stateManagementEntity.getOpState();
- } else {
- this.opState = null;
- }
- } catch (final Exception ex) {
- logger.error("StateManagement: getOpState exception: {}", ex.toString(), ex);
- }
-
+ getEntityState("getOpState", this.resourceName,
+ sm -> this.opState = sm.getOpState(),
+ () -> this.opState = null);
return this.opState;
}
@@ -735,33 +381,9 @@ public class StateManagement extends Observable {
* @return the availability status
*/
public String getAvailStatus() {
- if (logger.isDebugEnabled()) {
- logger.debug("StateManagement(6/1/16): getAvailStatus for resourceName {}", this.resourceName);
- }
-
- final EntityManager em = emf.createEntityManager();
- try (EntityMgrCloser emc = new EntityMgrCloser(em)) {
- final TypedQuery<StateManagementEntity> query =
- em.createQuery(GET_STATE_MANAGEMENT_ENTITY_QUERY, StateManagementEntity.class);
-
- query.setParameter(RESOURCE_NAME, this.resourceName);
-
- // Just test that we are retrieving the right object
- final List<StateManagementEntity> resourceList =
- query.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
- if (!resourceList.isEmpty()) {
- // exist
- final StateManagementEntity stateManagementEntity = resourceList.get(0);
- // refresh the object from DB in case cached data was returned
- em.refresh(stateManagementEntity);
- this.availStatus = stateManagementEntity.getAvailStatus();
- } else {
- this.availStatus = null;
- }
- } catch (final Exception ex) {
- logger.error("StateManagement: getAvailStatus exception: {}", ex.toString(), ex);
- }
-
+ getEntityState("getAvailStatus", this.resourceName,
+ sm -> this.availStatus = sm.getAvailStatus(),
+ () -> this.availStatus = null);
return this.availStatus;
}
@@ -771,33 +393,9 @@ public class StateManagement extends Observable {
* @return the standby status
*/
public String getStandbyStatus() {
- if (logger.isDebugEnabled()) {
- logger.debug("StateManagement(6/1/16): getStandbyStatus for resourceName {}", this.resourceName);
- }
-
- final EntityManager em = emf.createEntityManager();
- try (EntityMgrCloser emc = new EntityMgrCloser(em)) {
- final TypedQuery<StateManagementEntity> query =
- em.createQuery(GET_STATE_MANAGEMENT_ENTITY_QUERY, StateManagementEntity.class);
-
- query.setParameter(RESOURCE_NAME, this.resourceName);
-
- // Just test that we are retrieving the right object
- final List<StateManagementEntity> resourceList =
- query.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
- if (!resourceList.isEmpty()) {
- // exist
- final StateManagementEntity stateManagementEntity = resourceList.get(0);
- // refresh the object from DB in case cached data was returned
- em.refresh(stateManagementEntity);
- this.standbyStatus = stateManagementEntity.getStandbyStatus();
- } else {
- this.standbyStatus = null;
- }
- } catch (final Exception ex) {
- logger.error("StateManagement: getStandbyStatus exception: {}", ex.toString(), ex);
- }
-
+ getEntityState("getStandbyStatus", this.resourceName,
+ sm -> this.standbyStatus = sm.getStandbyStatus(),
+ () -> this.standbyStatus = null);
return this.standbyStatus;
}
@@ -808,48 +406,16 @@ public class StateManagement extends Observable {
* @return the standby status
*/
public String getStandbyStatus(final String otherResourceName) {
+ AtomicReference<String> tempStandbyStatus = new AtomicReference<>();
- if (logger.isDebugEnabled()) {
- logger.debug("StateManagement: getStandbyStatus: Entering, resourceName='{}'", otherResourceName);
- }
+ getEntityState("getStandbyStatus", otherResourceName,
+ sm -> tempStandbyStatus.set(sm.getStandbyStatus()),
+ () -> logger.error("getStandbyStatus: resourceName ={} not found in statemanagemententity table",
+ otherResourceName));
- String tempStandbyStatus = null;
+ logger.debug("getStandbyStatus: Returning standbyStatus={}", tempStandbyStatus.get());
- // The transaction is required for the LockModeType
- final EntityManager em = emf.createEntityManager();
-
- try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
-
- final TypedQuery<StateManagementEntity> stateManagementListQuery =
- em.createQuery(GET_STATE_MANAGEMENT_ENTITY_QUERY, StateManagementEntity.class);
- stateManagementListQuery.setParameter(RESOURCE_NAME, otherResourceName);
- final List<StateManagementEntity> stateManagementList = stateManagementListQuery
- .setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
- if (!stateManagementList.isEmpty()) {
- final StateManagementEntity stateManagementEntity = stateManagementList.get(0);
- // refresh the object from DB in case cached data was returned
- em.refresh(stateManagementEntity);
- tempStandbyStatus = stateManagementEntity.getStandbyStatus();
- if (logger.isDebugEnabled()) {
- logger.debug("getStandbyStatus: resourceName ={} has standbyStatus={}", otherResourceName,
- tempStandbyStatus);
- }
- } else {
- logger.error("getStandbyStatus: resourceName ={} not found in statemanagemententity table",
- otherResourceName);
- }
-
- et.commit();
- } catch (final Exception e) {
- logger.error(
- "getStandbyStatus: Caught Exception attempting to get statemanagemententity record, message='{}'",
- e.getMessage(), e);
- }
- if (logger.isDebugEnabled()) {
- logger.debug("getStandbyStatus: Returning standbyStatus={}", tempStandbyStatus);
- }
-
- return tempStandbyStatus;
+ return tempStandbyStatus.get();
}
/**
@@ -861,9 +427,7 @@ public class StateManagement extends Observable {
*/
private static StateManagementEntity findStateManagementEntity(final EntityManager em,
final String otherResourceName) {
- if (logger.isDebugEnabled()) {
- logger.debug("StateManagementEntity: findStateManagementEntity: Entry");
- }
+ logger.debug("StateManagementEntity: findStateManagementEntity: Entry");
try {
final TypedQuery<StateManagementEntity> query =
em.createQuery(GET_STATE_MANAGEMENT_ENTITY_QUERY, StateManagementEntity.class);
@@ -902,9 +466,7 @@ public class StateManagement extends Observable {
*/
public void deleteAllStateManagementEntities() {
- if (logger.isDebugEnabled()) {
- logger.debug("StateManagement: deleteAllStateManagementEntities: Entering");
- }
+ logger.debug("StateManagement: deleteAllStateManagementEntities: Entering");
/*
* Start transaction
@@ -916,17 +478,12 @@ public class StateManagement extends Observable {
em.createQuery("SELECT p FROM StateManagementEntity p", StateManagementEntity.class);
final List<StateManagementEntity> stateManagementEntityList = stateManagementEntityListQuery
.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
- if (logger.isDebugEnabled()) {
- logger.debug("deleteAllStateManagementEntities: Deleting {} StateManagementEntity records",
- stateManagementEntityList.size());
- }
+ logger.debug("deleteAllStateManagementEntities: Deleting {} StateManagementEntity records",
+ stateManagementEntityList.size());
for (final StateManagementEntity stateManagementEntity : stateManagementEntityList) {
- if (logger.isDebugEnabled()) {
- logger.debug(
- "deleteAllStateManagementEntities: Deleting statemanagemententity with resourceName={} and"
- + " standbyStatus={}",
- stateManagementEntity.getResourceName(), stateManagementEntity.getStandbyStatus());
- }
+ logger.debug("deleteAllStateManagementEntities: Deleting statemanagemententity with resourceName={} and"
+ + " standbyStatus={}", stateManagementEntity.getResourceName(),
+ stateManagementEntity.getStandbyStatus());
em.remove(stateManagementEntity);
}
@@ -934,9 +491,12 @@ public class StateManagement extends Observable {
} catch (final Exception ex) {
logger.error("StateManagement.deleteAllStateManagementEntities() caught Exception: ", ex);
}
- if (logger.isDebugEnabled()) {
- logger.debug("deleteAllStateManagementEntities: Exiting");
- }
+ logger.debug("deleteAllStateManagementEntities: Exiting");
+ }
+
+ @FunctionalInterface
+ private static interface ExFunction<T,R> {
+ public R update(T object) throws IntegrityMonitorException;
}
private static class MyTransaction extends EntityTransCloser {