aboutsummaryrefslogtreecommitdiffstats
path: root/appc-oam/appc-oam-bundle/src/main/java/org/openecomp/appc/oam/processor/OamRestartProcessor.java
diff options
context:
space:
mode:
Diffstat (limited to 'appc-oam/appc-oam-bundle/src/main/java/org/openecomp/appc/oam/processor/OamRestartProcessor.java')
-rw-r--r--appc-oam/appc-oam-bundle/src/main/java/org/openecomp/appc/oam/processor/OamRestartProcessor.java207
1 files changed, 207 insertions, 0 deletions
diff --git a/appc-oam/appc-oam-bundle/src/main/java/org/openecomp/appc/oam/processor/OamRestartProcessor.java b/appc-oam/appc-oam-bundle/src/main/java/org/openecomp/appc/oam/processor/OamRestartProcessor.java
new file mode 100644
index 000000000..529d25004
--- /dev/null
+++ b/appc-oam/appc-oam-bundle/src/main/java/org/openecomp/appc/oam/processor/OamRestartProcessor.java
@@ -0,0 +1,207 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
+ * 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.
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.oam.processor;
+
+import com.att.eelf.configuration.EELFLogger;
+import org.openecomp.appc.exceptions.APPCException;
+import org.openecomp.appc.i18n.Msg;
+import org.openecomp.appc.oam.AppcOam;
+import org.openecomp.appc.oam.util.AsyncTaskHelper;
+import org.openecomp.appc.oam.util.ConfigurationHelper;
+import org.openecomp.appc.oam.util.OperationHelper;
+import org.openecomp.appc.oam.util.StateHelper;
+import org.openecomp.appc.requesthandler.LCMStateManager;
+import org.openecomp.appc.statemachine.impl.readers.AppcOamStates;
+
+/**
+ * Processor to handle restart OAM API.
+ */
+public class OamRestartProcessor extends BaseProcessor {
+ /**
+ * Action phases:
+ * <br> -ToStop: call bundles stop
+ * <br> -Stopped: check if all bundle state reached stopped
+ * <br> -ToStart: call bundles start
+ * <br> -Started: action is full completed
+ * <br> -Timeout: indication of timeout reached
+ */
+ private enum ActionPhases {
+ ToStop,
+ Stopped,
+ ToStart,
+ Started,
+ Timeout
+ }
+
+ /**
+ * Constructor
+ *
+ * @param eelfLogger for logging
+ * @param configurationHelper for property reading
+ * @param stateHelper for APP-C OAM state checking
+ * @param asyncTaskHelper for scheduling async task
+ * @param operationHelper for operational helper
+ */
+ public OamRestartProcessor(EELFLogger eelfLogger,
+ ConfigurationHelper configurationHelper,
+ StateHelper stateHelper,
+ AsyncTaskHelper asyncTaskHelper,
+ OperationHelper operationHelper) {
+ super(eelfLogger, configurationHelper, stateHelper, asyncTaskHelper, operationHelper);
+
+ rpc = AppcOam.RPC.restart;
+ auditMsg = Msg.OAM_OPERATION_RESTARTING;
+ }
+
+ @Override
+ protected void scheduleAsyncTask() {
+ runnable = new MyRunnable(this);
+ super.scheduleAsyncTask();
+ }
+
+ /**
+ * This runnable does the async handling for the restart REST API. And it will be scheduled to run one time.
+ *
+ * <p>This runnable will the following operations: <br>
+ * - do APP-C OAM bundle stop and then start through BundlerHelper<br>
+ * - and always enable LCM operation handling (which can be disabled through maintenance mode API).<br>
+ * <p>Once above operations are done, the runnale will <br>
+ * - post message through operatonHelper <br>
+ * - set APP-C OAM state to started <br>
+ * - audit log the state <br>
+ */
+ class MyRunnable extends BaseActionRunnable {
+
+ ActionPhases currentPhase = ActionPhases.ToStop;
+ private LCMStateManager lcmStateManager;
+
+ MyRunnable(BaseProcessor parent) {
+ super(parent);
+
+ actionName = "OAM Restart";
+ auditMsg = Msg.OAM_OPERATION_RESTARTED;
+ finalState = AppcOamStates.Started;
+ }
+
+ /**
+ * Do restart action, include stop then start and always enable LCM operation.
+ * @return true if action is successful, false when aciton is failed or aborted
+ */
+ @Override
+ boolean doAction() {
+ logDebug(String.format("Executing %s task at phase (%s)",
+ actionName, currentPhase == null ? "null" : currentPhase.name()));
+
+ boolean isBundleOperationCompleted = true;
+ try {
+ switch (currentPhase) {
+ case ToStop:
+ isBundleOperationCompleted = bundleHelper.bundleOperations(
+ AppcOam.RPC.stop, bundleNameToFuture, myParent.asyncTaskHelper);
+ currentPhase = ActionPhases.Stopped;
+ break;
+ case Stopped:
+ // check state
+ AppcOamStates currentState = stateHelper.getBundlesState();
+ if (currentState == AppcOamStates.Stopped) {
+ currentPhase = ActionPhases.ToStart;
+ } else {
+ logDebug(String.format("%s task is waiting in stopped phase, current state is %s",
+ actionName, currentState));
+ }
+ break;
+ case ToStart:
+ isBundleOperationCompleted = bundleHelper.bundleOperations(
+ AppcOam.RPC.start, bundleNameToFuture, myParent.asyncTaskHelper);
+ currentPhase = ActionPhases.Started;
+ break;
+ case Timeout:
+ // do nothing
+ break;
+ default:
+ // Should not reach log it and return false;
+ logger.error("%s task doAction reached %s phase. not supported. return false.",
+ actionName, currentPhase.name());
+ stateHelper.setState(AppcOamStates.Error);
+ return false;
+ }
+
+ if (isTimeout("restart doAction")) {
+ currentPhase = ActionPhases.Timeout;
+ return true;
+ }
+ if (isBundleOperationCompleted) {
+ return true;
+ }
+
+ setAbortStatus();
+ } catch (APPCException e) {
+ setErrorStatus(e);
+ stateHelper.setState(AppcOamStates.Error);
+ }
+
+ return false;
+ }
+
+ /**
+ * With additional to get the LCMStateManager service
+ * @see BaseActionRunnable#checkState()
+ */
+ @Override
+ boolean checkState() {
+ switch (currentPhase) {
+ case Started:
+ try {
+ lcmStateManager = operationHelper.getService(LCMStateManager.class);
+ return super.checkState();
+ } catch (APPCException e) {
+ logDebug("LCMStateManager is not available.");
+ }
+ break;
+ default:
+ // in all the other ActionPhase, we want the run go back to doAction
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Final handling. The thread is cancelled.
+ * @param setState boolean to indicate if set OAM state or not
+ */
+ @Override
+ void postDoAction(boolean setState) {
+ AppcOamStates newState = null;
+ if (setState) {
+ logDebug("Always enable LCM operation");
+ lcmStateManager.enableLCMOperations();
+ newState = finalState;
+ }
+ postAction(newState);
+ super.postDoAction(setState);
+ }
+
+ }
+}