|
@@ -24,6 +24,7 @@ import java.util.concurrent.locks.ReadWriteLock;
|
|
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
|
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
|
|
|
|
|
import org.apache.ambari.server.state.fsm.InvalidStateTransitonException;
|
|
import org.apache.ambari.server.state.fsm.InvalidStateTransitonException;
|
|
|
|
+import org.apache.ambari.server.state.fsm.SingleArcTransition;
|
|
import org.apache.ambari.server.state.fsm.StateMachine;
|
|
import org.apache.ambari.server.state.fsm.StateMachine;
|
|
import org.apache.ambari.server.state.fsm.StateMachineFactory;
|
|
import org.apache.ambari.server.state.fsm.StateMachineFactory;
|
|
import org.apache.ambari.server.state.live.job.Job;
|
|
import org.apache.ambari.server.state.live.job.Job;
|
|
@@ -43,6 +44,10 @@ public class ServiceComponentNodeImpl implements ServiceComponentNode {
|
|
private final String serviceComponentName;
|
|
private final String serviceComponentName;
|
|
private final String hostName;
|
|
private final String hostName;
|
|
|
|
|
|
|
|
+ private long lastOpStartTime;
|
|
|
|
+ private long lastOpEndTime;
|
|
|
|
+ private long lastOpLastUpdateTime;
|
|
|
|
+
|
|
private static final StateMachineFactory
|
|
private static final StateMachineFactory
|
|
<ServiceComponentNodeImpl, ServiceComponentNodeLiveState,
|
|
<ServiceComponentNodeImpl, ServiceComponentNodeLiveState,
|
|
ServiceComponentNodeEventType, ServiceComponentNodeEvent>
|
|
ServiceComponentNodeEventType, ServiceComponentNodeEvent>
|
|
@@ -57,85 +62,124 @@ public class ServiceComponentNodeImpl implements ServiceComponentNode {
|
|
|
|
|
|
.addTransition(ServiceComponentNodeLiveState.INIT,
|
|
.addTransition(ServiceComponentNodeLiveState.INIT,
|
|
ServiceComponentNodeLiveState.INSTALLING,
|
|
ServiceComponentNodeLiveState.INSTALLING,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_INSTALL)
|
|
|
|
-
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_INSTALL,
|
|
|
|
+ new ServiceComponentNodeOpStartedTransition())
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALLING,
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALLING,
|
|
ServiceComponentNodeLiveState.INSTALLED,
|
|
ServiceComponentNodeLiveState.INSTALLED,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_OP_SUCCEEDED)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_SUCCEEDED,
|
|
|
|
+ new ServiceComponentNodeOpCompletedTransition())
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALLING,
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALLING,
|
|
ServiceComponentNodeLiveState.INSTALLING,
|
|
ServiceComponentNodeLiveState.INSTALLING,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_OP_IN_PROGRESS)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_IN_PROGRESS,
|
|
|
|
+ new ServiceComponentNodeOpInProgressTransition())
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALLING,
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALLING,
|
|
ServiceComponentNodeLiveState.INSTALL_FAILED,
|
|
ServiceComponentNodeLiveState.INSTALL_FAILED,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_OP_FAILED)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_FAILED,
|
|
|
|
+ new ServiceComponentNodeOpCompletedTransition())
|
|
|
|
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALL_FAILED,
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALL_FAILED,
|
|
ServiceComponentNodeLiveState.INSTALLING,
|
|
ServiceComponentNodeLiveState.INSTALLING,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_OP_RESTART)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_RESTART,
|
|
|
|
+ new ServiceComponentNodeOpStartedTransition())
|
|
|
|
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALLED,
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALLED,
|
|
ServiceComponentNodeLiveState.STARTING,
|
|
ServiceComponentNodeLiveState.STARTING,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_START)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_START,
|
|
|
|
+ new ServiceComponentNodeOpStartedTransition())
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALLED,
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALLED,
|
|
ServiceComponentNodeLiveState.UNINSTALLING,
|
|
ServiceComponentNodeLiveState.UNINSTALLING,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_UNINSTALL)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_UNINSTALL,
|
|
|
|
+ new ServiceComponentNodeOpStartedTransition())
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALLED,
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALLED,
|
|
ServiceComponentNodeLiveState.INSTALLING,
|
|
ServiceComponentNodeLiveState.INSTALLING,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_INSTALL)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_INSTALL,
|
|
|
|
+ new ServiceComponentNodeOpStartedTransition())
|
|
|
|
|
|
.addTransition(ServiceComponentNodeLiveState.STARTING,
|
|
.addTransition(ServiceComponentNodeLiveState.STARTING,
|
|
ServiceComponentNodeLiveState.STARTING,
|
|
ServiceComponentNodeLiveState.STARTING,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_OP_IN_PROGRESS)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_IN_PROGRESS,
|
|
|
|
+ new ServiceComponentNodeOpInProgressTransition())
|
|
.addTransition(ServiceComponentNodeLiveState.STARTING,
|
|
.addTransition(ServiceComponentNodeLiveState.STARTING,
|
|
ServiceComponentNodeLiveState.STARTED,
|
|
ServiceComponentNodeLiveState.STARTED,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_OP_SUCCEEDED)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_SUCCEEDED,
|
|
|
|
+ new ServiceComponentNodeOpCompletedTransition())
|
|
.addTransition(ServiceComponentNodeLiveState.STARTING,
|
|
.addTransition(ServiceComponentNodeLiveState.STARTING,
|
|
ServiceComponentNodeLiveState.START_FAILED,
|
|
ServiceComponentNodeLiveState.START_FAILED,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_OP_FAILED)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_FAILED,
|
|
|
|
+ new ServiceComponentNodeOpCompletedTransition())
|
|
|
|
|
|
.addTransition(ServiceComponentNodeLiveState.START_FAILED,
|
|
.addTransition(ServiceComponentNodeLiveState.START_FAILED,
|
|
ServiceComponentNodeLiveState.STARTING,
|
|
ServiceComponentNodeLiveState.STARTING,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_OP_RESTART)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_RESTART,
|
|
|
|
+ new ServiceComponentNodeOpStartedTransition())
|
|
|
|
|
|
.addTransition(ServiceComponentNodeLiveState.STARTED,
|
|
.addTransition(ServiceComponentNodeLiveState.STARTED,
|
|
ServiceComponentNodeLiveState.STOPPING,
|
|
ServiceComponentNodeLiveState.STOPPING,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_STOP)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_STOP,
|
|
|
|
+ new ServiceComponentNodeOpStartedTransition())
|
|
|
|
|
|
.addTransition(ServiceComponentNodeLiveState.STOPPING,
|
|
.addTransition(ServiceComponentNodeLiveState.STOPPING,
|
|
ServiceComponentNodeLiveState.STOPPING,
|
|
ServiceComponentNodeLiveState.STOPPING,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_OP_IN_PROGRESS)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_IN_PROGRESS,
|
|
|
|
+ new ServiceComponentNodeOpInProgressTransition())
|
|
.addTransition(ServiceComponentNodeLiveState.STOPPING,
|
|
.addTransition(ServiceComponentNodeLiveState.STOPPING,
|
|
ServiceComponentNodeLiveState.INSTALLED,
|
|
ServiceComponentNodeLiveState.INSTALLED,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_OP_SUCCEEDED)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_SUCCEEDED,
|
|
|
|
+ new ServiceComponentNodeOpCompletedTransition())
|
|
.addTransition(ServiceComponentNodeLiveState.STOPPING,
|
|
.addTransition(ServiceComponentNodeLiveState.STOPPING,
|
|
ServiceComponentNodeLiveState.STOP_FAILED,
|
|
ServiceComponentNodeLiveState.STOP_FAILED,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_OP_FAILED)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_FAILED,
|
|
|
|
+ new ServiceComponentNodeOpCompletedTransition())
|
|
|
|
|
|
.addTransition(ServiceComponentNodeLiveState.STOP_FAILED,
|
|
.addTransition(ServiceComponentNodeLiveState.STOP_FAILED,
|
|
ServiceComponentNodeLiveState.STOPPING,
|
|
ServiceComponentNodeLiveState.STOPPING,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_OP_RESTART)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_RESTART,
|
|
|
|
+ new ServiceComponentNodeOpStartedTransition())
|
|
|
|
|
|
.addTransition(ServiceComponentNodeLiveState.UNINSTALLING,
|
|
.addTransition(ServiceComponentNodeLiveState.UNINSTALLING,
|
|
ServiceComponentNodeLiveState.UNINSTALLING,
|
|
ServiceComponentNodeLiveState.UNINSTALLING,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_OP_IN_PROGRESS)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_IN_PROGRESS,
|
|
|
|
+ new ServiceComponentNodeOpInProgressTransition())
|
|
.addTransition(ServiceComponentNodeLiveState.UNINSTALLING,
|
|
.addTransition(ServiceComponentNodeLiveState.UNINSTALLING,
|
|
ServiceComponentNodeLiveState.UNINSTALLED,
|
|
ServiceComponentNodeLiveState.UNINSTALLED,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_OP_SUCCEEDED)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_SUCCEEDED,
|
|
|
|
+ new ServiceComponentNodeOpCompletedTransition())
|
|
.addTransition(ServiceComponentNodeLiveState.UNINSTALLING,
|
|
.addTransition(ServiceComponentNodeLiveState.UNINSTALLING,
|
|
ServiceComponentNodeLiveState.UNINSTALL_FAILED,
|
|
ServiceComponentNodeLiveState.UNINSTALL_FAILED,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_OP_FAILED)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_FAILED,
|
|
|
|
+ new ServiceComponentNodeOpCompletedTransition())
|
|
|
|
|
|
.addTransition(ServiceComponentNodeLiveState.UNINSTALL_FAILED,
|
|
.addTransition(ServiceComponentNodeLiveState.UNINSTALL_FAILED,
|
|
ServiceComponentNodeLiveState.UNINSTALLING,
|
|
ServiceComponentNodeLiveState.UNINSTALLING,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_OP_RESTART)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_RESTART,
|
|
|
|
+ new ServiceComponentNodeOpStartedTransition())
|
|
|
|
|
|
.addTransition(ServiceComponentNodeLiveState.UNINSTALLED,
|
|
.addTransition(ServiceComponentNodeLiveState.UNINSTALLED,
|
|
ServiceComponentNodeLiveState.INSTALLING,
|
|
ServiceComponentNodeLiveState.INSTALLING,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_INSTALL)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_INSTALL,
|
|
|
|
+ new ServiceComponentNodeOpStartedTransition())
|
|
|
|
|
|
.addTransition(ServiceComponentNodeLiveState.UNINSTALLED,
|
|
.addTransition(ServiceComponentNodeLiveState.UNINSTALLED,
|
|
|
|
+ ServiceComponentNodeLiveState.WIPING_OUT,
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_WIPEOUT,
|
|
|
|
+ new ServiceComponentNodeOpStartedTransition())
|
|
|
|
+
|
|
|
|
+ .addTransition(ServiceComponentNodeLiveState.WIPING_OUT,
|
|
|
|
+ ServiceComponentNodeLiveState.WIPING_OUT,
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_IN_PROGRESS,
|
|
|
|
+ new ServiceComponentNodeOpInProgressTransition())
|
|
|
|
+ .addTransition(ServiceComponentNodeLiveState.WIPING_OUT,
|
|
ServiceComponentNodeLiveState.INIT,
|
|
ServiceComponentNodeLiveState.INIT,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_WIPEOUT)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_SUCCEEDED,
|
|
|
|
+ new ServiceComponentNodeOpCompletedTransition())
|
|
|
|
+ .addTransition(ServiceComponentNodeLiveState.WIPING_OUT,
|
|
|
|
+ ServiceComponentNodeLiveState.WIPEOUT_FAILED,
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_FAILED,
|
|
|
|
+ new ServiceComponentNodeOpCompletedTransition())
|
|
|
|
+ .addTransition(ServiceComponentNodeLiveState.WIPEOUT_FAILED,
|
|
|
|
+ ServiceComponentNodeLiveState.WIPING_OUT,
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_RESTART,
|
|
|
|
+ new ServiceComponentNodeOpStartedTransition())
|
|
|
|
|
|
.installTopology();
|
|
.installTopology();
|
|
|
|
|
|
@@ -153,50 +197,80 @@ public class ServiceComponentNodeImpl implements ServiceComponentNode {
|
|
|
|
|
|
.addTransition(ServiceComponentNodeLiveState.INIT,
|
|
.addTransition(ServiceComponentNodeLiveState.INIT,
|
|
ServiceComponentNodeLiveState.INSTALLING,
|
|
ServiceComponentNodeLiveState.INSTALLING,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_INSTALL)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_INSTALL,
|
|
|
|
+ new ServiceComponentNodeOpStartedTransition())
|
|
|
|
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALLING,
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALLING,
|
|
ServiceComponentNodeLiveState.INSTALLED,
|
|
ServiceComponentNodeLiveState.INSTALLED,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_OP_SUCCEEDED)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_SUCCEEDED,
|
|
|
|
+ new ServiceComponentNodeOpCompletedTransition())
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALLING,
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALLING,
|
|
ServiceComponentNodeLiveState.INSTALLING,
|
|
ServiceComponentNodeLiveState.INSTALLING,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_OP_IN_PROGRESS)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_IN_PROGRESS,
|
|
|
|
+ new ServiceComponentNodeOpInProgressTransition())
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALLING,
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALLING,
|
|
ServiceComponentNodeLiveState.INSTALL_FAILED,
|
|
ServiceComponentNodeLiveState.INSTALL_FAILED,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_OP_FAILED)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_FAILED,
|
|
|
|
+ new ServiceComponentNodeOpCompletedTransition())
|
|
|
|
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALL_FAILED,
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALL_FAILED,
|
|
ServiceComponentNodeLiveState.INSTALLING,
|
|
ServiceComponentNodeLiveState.INSTALLING,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_OP_RESTART)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_RESTART,
|
|
|
|
+ new ServiceComponentNodeOpStartedTransition())
|
|
|
|
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALLED,
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALLED,
|
|
ServiceComponentNodeLiveState.UNINSTALLING,
|
|
ServiceComponentNodeLiveState.UNINSTALLING,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_UNINSTALL)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_UNINSTALL,
|
|
|
|
+ new ServiceComponentNodeOpStartedTransition())
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALLED,
|
|
.addTransition(ServiceComponentNodeLiveState.INSTALLED,
|
|
ServiceComponentNodeLiveState.INSTALLING,
|
|
ServiceComponentNodeLiveState.INSTALLING,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_INSTALL)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_INSTALL,
|
|
|
|
+ new ServiceComponentNodeOpStartedTransition())
|
|
|
|
|
|
.addTransition(ServiceComponentNodeLiveState.UNINSTALLING,
|
|
.addTransition(ServiceComponentNodeLiveState.UNINSTALLING,
|
|
ServiceComponentNodeLiveState.UNINSTALLING,
|
|
ServiceComponentNodeLiveState.UNINSTALLING,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_OP_IN_PROGRESS)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_IN_PROGRESS,
|
|
|
|
+ new ServiceComponentNodeOpInProgressTransition())
|
|
.addTransition(ServiceComponentNodeLiveState.UNINSTALLING,
|
|
.addTransition(ServiceComponentNodeLiveState.UNINSTALLING,
|
|
ServiceComponentNodeLiveState.UNINSTALLED,
|
|
ServiceComponentNodeLiveState.UNINSTALLED,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_OP_SUCCEEDED)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_SUCCEEDED,
|
|
|
|
+ new ServiceComponentNodeOpCompletedTransition())
|
|
.addTransition(ServiceComponentNodeLiveState.UNINSTALLING,
|
|
.addTransition(ServiceComponentNodeLiveState.UNINSTALLING,
|
|
ServiceComponentNodeLiveState.UNINSTALL_FAILED,
|
|
ServiceComponentNodeLiveState.UNINSTALL_FAILED,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_OP_FAILED)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_FAILED,
|
|
|
|
+ new ServiceComponentNodeOpCompletedTransition())
|
|
|
|
|
|
.addTransition(ServiceComponentNodeLiveState.UNINSTALL_FAILED,
|
|
.addTransition(ServiceComponentNodeLiveState.UNINSTALL_FAILED,
|
|
ServiceComponentNodeLiveState.UNINSTALLING,
|
|
ServiceComponentNodeLiveState.UNINSTALLING,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_OP_RESTART)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_RESTART,
|
|
|
|
+ new ServiceComponentNodeOpStartedTransition())
|
|
|
|
|
|
.addTransition(ServiceComponentNodeLiveState.UNINSTALLED,
|
|
.addTransition(ServiceComponentNodeLiveState.UNINSTALLED,
|
|
ServiceComponentNodeLiveState.INSTALLING,
|
|
ServiceComponentNodeLiveState.INSTALLING,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_INSTALL)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_INSTALL,
|
|
|
|
+ new ServiceComponentNodeOpStartedTransition())
|
|
|
|
|
|
.addTransition(ServiceComponentNodeLiveState.UNINSTALLED,
|
|
.addTransition(ServiceComponentNodeLiveState.UNINSTALLED,
|
|
|
|
+ ServiceComponentNodeLiveState.WIPING_OUT,
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_WIPEOUT,
|
|
|
|
+ new ServiceComponentNodeOpStartedTransition())
|
|
|
|
+
|
|
|
|
+ .addTransition(ServiceComponentNodeLiveState.WIPING_OUT,
|
|
|
|
+ ServiceComponentNodeLiveState.WIPING_OUT,
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_IN_PROGRESS,
|
|
|
|
+ new ServiceComponentNodeOpInProgressTransition())
|
|
|
|
+ .addTransition(ServiceComponentNodeLiveState.WIPING_OUT,
|
|
ServiceComponentNodeLiveState.INIT,
|
|
ServiceComponentNodeLiveState.INIT,
|
|
- ServiceComponentNodeEventType.NODE_SVCCOMP_WIPEOUT)
|
|
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_SUCCEEDED,
|
|
|
|
+ new ServiceComponentNodeOpCompletedTransition())
|
|
|
|
+ .addTransition(ServiceComponentNodeLiveState.WIPING_OUT,
|
|
|
|
+ ServiceComponentNodeLiveState.WIPEOUT_FAILED,
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_FAILED,
|
|
|
|
+ new ServiceComponentNodeOpCompletedTransition())
|
|
|
|
+ .addTransition(ServiceComponentNodeLiveState.WIPEOUT_FAILED,
|
|
|
|
+ ServiceComponentNodeLiveState.WIPING_OUT,
|
|
|
|
+ ServiceComponentNodeEventType.NODE_SVCCOMP_OP_RESTART,
|
|
|
|
+ new ServiceComponentNodeOpStartedTransition())
|
|
|
|
|
|
.installTopology();
|
|
.installTopology();
|
|
|
|
|
|
@@ -204,6 +278,85 @@ public class ServiceComponentNodeImpl implements ServiceComponentNode {
|
|
private final StateMachine<ServiceComponentNodeLiveState,
|
|
private final StateMachine<ServiceComponentNodeLiveState,
|
|
ServiceComponentNodeEventType, ServiceComponentNodeEvent> stateMachine;
|
|
ServiceComponentNodeEventType, ServiceComponentNodeEvent> stateMachine;
|
|
|
|
|
|
|
|
+ static class ServiceComponentNodeOpCompletedTransition
|
|
|
|
+ implements SingleArcTransition<ServiceComponentNodeImpl,
|
|
|
|
+ ServiceComponentNodeEvent> {
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void transition(ServiceComponentNodeImpl impl,
|
|
|
|
+ ServiceComponentNodeEvent event) {
|
|
|
|
+ // TODO Audit logs
|
|
|
|
+ impl.updateLastOpInfo(event.getType(), event.getOpTimestamp());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ static class ServiceComponentNodeOpStartedTransition
|
|
|
|
+ implements SingleArcTransition<ServiceComponentNodeImpl,
|
|
|
|
+ ServiceComponentNodeEvent> {
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void transition(ServiceComponentNodeImpl impl,
|
|
|
|
+ ServiceComponentNodeEvent event) {
|
|
|
|
+ // TODO Audit logs
|
|
|
|
+ impl.updateLastOpInfo(event.getType(), event.getOpTimestamp());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ static class ServiceComponentNodeOpInProgressTransition
|
|
|
|
+ implements SingleArcTransition<ServiceComponentNodeImpl,
|
|
|
|
+ ServiceComponentNodeEvent> {
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void transition(ServiceComponentNodeImpl impl,
|
|
|
|
+ ServiceComponentNodeEvent event) {
|
|
|
|
+ // TODO Audit logs
|
|
|
|
+ impl.updateLastOpInfo(event.getType(), event.getOpTimestamp());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ private void resetLastOpInfo() {
|
|
|
|
+ try {
|
|
|
|
+ writeLock.lock();
|
|
|
|
+ setLastOpStartTime(-1);
|
|
|
|
+ setLastOpLastUpdateTime(-1);
|
|
|
|
+ setLastOpEndTime(-1);
|
|
|
|
+ }
|
|
|
|
+ finally {
|
|
|
|
+ writeLock.unlock();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void updateLastOpInfo(ServiceComponentNodeEventType eventType,
|
|
|
|
+ long time) {
|
|
|
|
+ try {
|
|
|
|
+ writeLock.lock();
|
|
|
|
+ switch (eventType) {
|
|
|
|
+ case NODE_SVCCOMP_INSTALL:
|
|
|
|
+ case NODE_SVCCOMP_START:
|
|
|
|
+ case NODE_SVCCOMP_STOP:
|
|
|
|
+ case NODE_SVCCOMP_UNINSTALL:
|
|
|
|
+ case NODE_SVCCOMP_WIPEOUT:
|
|
|
|
+ case NODE_SVCCOMP_OP_RESTART:
|
|
|
|
+ resetLastOpInfo();
|
|
|
|
+ setLastOpStartTime(time);
|
|
|
|
+ break;
|
|
|
|
+ case NODE_SVCCOMP_OP_FAILED:
|
|
|
|
+ case NODE_SVCCOMP_OP_SUCCEEDED:
|
|
|
|
+ setLastOpLastUpdateTime(time);
|
|
|
|
+ setLastOpEndTime(time);
|
|
|
|
+ break;
|
|
|
|
+ case NODE_SVCCOMP_OP_IN_PROGRESS:
|
|
|
|
+ setLastOpLastUpdateTime(time);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ finally {
|
|
|
|
+ writeLock.unlock();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
public ServiceComponentNodeImpl(String serviceComponentName,
|
|
public ServiceComponentNodeImpl(String serviceComponentName,
|
|
String hostName, boolean isClient) {
|
|
String hostName, boolean isClient) {
|
|
super();
|
|
super();
|
|
@@ -217,6 +370,8 @@ public class ServiceComponentNodeImpl implements ServiceComponentNode {
|
|
this.writeLock = rwLock.writeLock();
|
|
this.writeLock = rwLock.writeLock();
|
|
this.serviceComponentName = serviceComponentName;
|
|
this.serviceComponentName = serviceComponentName;
|
|
this.hostName = hostName;
|
|
this.hostName = hostName;
|
|
|
|
+ this.state = new ServiceComponentNodeState();
|
|
|
|
+ this.resetLastOpInfo();
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -256,6 +411,7 @@ public class ServiceComponentNodeImpl implements ServiceComponentNode {
|
|
try {
|
|
try {
|
|
stateMachine.doTransition(event.getType(), event);
|
|
stateMachine.doTransition(event.getType(), event);
|
|
state.setState(stateMachine.getCurrentState());
|
|
state.setState(stateMachine.getCurrentState());
|
|
|
|
+ // TODO Audit logs
|
|
} catch (InvalidStateTransitonException e) {
|
|
} catch (InvalidStateTransitonException e) {
|
|
LOG.error("Can't handle ServiceComponentNodeEvent event at"
|
|
LOG.error("Can't handle ServiceComponentNodeEvent event at"
|
|
+ " current state"
|
|
+ " current state"
|
|
@@ -299,5 +455,82 @@ public class ServiceComponentNodeImpl implements ServiceComponentNode {
|
|
return hostName;
|
|
return hostName;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * @return the lastOpStartTime
|
|
|
|
+ */
|
|
|
|
+ public long getLastOpStartTime() {
|
|
|
|
+ try {
|
|
|
|
+ readLock.lock();
|
|
|
|
+ return lastOpStartTime;
|
|
|
|
+ }
|
|
|
|
+ finally {
|
|
|
|
+ readLock.unlock();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * @param lastOpStartTime the lastOpStartTime to set
|
|
|
|
+ */
|
|
|
|
+ public void setLastOpStartTime(long lastOpStartTime) {
|
|
|
|
+ try {
|
|
|
|
+ writeLock.lock();
|
|
|
|
+ this.lastOpStartTime = lastOpStartTime;
|
|
|
|
+ }
|
|
|
|
+ finally {
|
|
|
|
+ writeLock.unlock();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * @return the lastOpEndTime
|
|
|
|
+ */
|
|
|
|
+ public long getLastOpEndTime() {
|
|
|
|
+ try {
|
|
|
|
+ readLock.lock();
|
|
|
|
+ return lastOpEndTime;
|
|
|
|
+ }
|
|
|
|
+ finally {
|
|
|
|
+ readLock.unlock();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * @param lastOpEndTime the lastOpEndTime to set
|
|
|
|
+ */
|
|
|
|
+ public void setLastOpEndTime(long lastOpEndTime) {
|
|
|
|
+ try {
|
|
|
|
+ writeLock.lock();
|
|
|
|
+ this.lastOpEndTime = lastOpEndTime;
|
|
|
|
+ }
|
|
|
|
+ finally {
|
|
|
|
+ writeLock.unlock();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * @return the lastOpLastUpdateTime
|
|
|
|
+ */
|
|
|
|
+ public long getLastOpLastUpdateTime() {
|
|
|
|
+ try {
|
|
|
|
+ readLock.lock();
|
|
|
|
+ return lastOpLastUpdateTime;
|
|
|
|
+ }
|
|
|
|
+ finally {
|
|
|
|
+ readLock.unlock();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * @param lastOpLastUpdateTime the lastOpLastUpdateTime to set
|
|
|
|
+ */
|
|
|
|
+ public void setLastOpLastUpdateTime(long lastOpLastUpdateTime) {
|
|
|
|
+ try {
|
|
|
|
+ writeLock.lock();
|
|
|
|
+ this.lastOpLastUpdateTime = lastOpLastUpdateTime;
|
|
|
|
+ }
|
|
|
|
+ finally {
|
|
|
|
+ writeLock.unlock();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|