Updated Branches:
  refs/heads/vmsync 967c82226 -> 58112a9e1

Add VM power state, use record event info to represent user/system intention 
for sync process to use


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/58112a9e
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/58112a9e
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/58112a9e

Branch: refs/heads/vmsync
Commit: 58112a9e12db3b2964aa62d39e473fbf3274c058
Parents: 967c822
Author: Kelven Yang <[email protected]>
Authored: Fri Apr 12 18:53:24 2013 -0700
Committer: Kelven Yang <[email protected]>
Committed: Fri Apr 12 18:53:24 2013 -0700

----------------------------------------------------------------------
 api/src/com/cloud/vm/VirtualMachine.java           |    7 ++
 core/src/com/cloud/vm/VMInstanceVO.java            |   57 ++++++++++++++-
 .../entity/api/DataCenterResourceManagerImpl.java  |    8 +-
 .../entity/api/db/dao/EngineClusterDaoImpl.java    |    2 +-
 .../entity/api/db/dao/EngineDataCenterDaoImpl.java |    2 +-
 .../entity/api/db/dao/EngineHostDaoImpl.java       |    2 +-
 .../entity/api/db/dao/EngineHostPodDaoImpl.java    |    2 +-
 .../storage/image/store/TemplateObject.java        |    2 +-
 .../snapshot/SnapshotStateMachineManagerImpl.java  |    2 +-
 .../datastore/ObjectInDataStoreManagerImpl.java    |    4 +-
 .../storage/db/ObjectInDataStoreDaoImpl.java       |    2 +-
 .../volume/db/TemplatePrimaryDataStoreDaoImpl.java |    2 +-
 .../storage/volume/db/VolumeDao2Impl.java          |    2 +-
 .../cloudstack/storage/volume/VolumeObject.java    |    2 +-
 .../baremetal/manager/BaremetalManagerImpl.java    |    4 +-
 .../cloud/network/element/MidoNetElementTest.java  |    1 +
 .../com/cloud/agent/manager/AgentManagerImpl.java  |    2 +-
 .../com/cloud/capacity/CapacityManagerImpl.java    |    4 +-
 server/src/com/cloud/host/dao/HostDaoImpl.java     |    2 +-
 .../src/com/cloud/network/NetworkManagerImpl.java  |    2 +-
 .../com/cloud/network/NetworkStateListener.java    |    4 +-
 .../src/com/cloud/network/dao/NetworkDaoImpl.java  |    2 +-
 .../network/security/SecurityGroupManagerImpl.java |    4 +-
 .../src/com/cloud/storage/VolumeManagerImpl.java   |    2 +-
 .../src/com/cloud/storage/dao/SnapshotDaoImpl.java |    2 +-
 .../com/cloud/storage/dao/VMTemplateDaoImpl.java   |    2 +-
 .../cloud/storage/dao/VMTemplateHostDaoImpl.java   |    2 +-
 .../cloud/storage/dao/VMTemplatePoolDaoImpl.java   |    2 +-
 .../src/com/cloud/storage/dao/VolumeDaoImpl.java   |    2 +-
 .../com/cloud/storage/dao/VolumeHostDaoImpl.java   |    2 +-
 .../storage/listener/SnapshotStateListener.java    |    4 +-
 .../storage/listener/VolumeStateListener.java      |    4 +-
 server/src/com/cloud/vm/UserVmStateListener.java   |    4 +-
 .../com/cloud/vm/VirtualMachineManagerImpl.java    |    4 +-
 server/src/com/cloud/vm/dao/VMInstanceDaoImpl.java |    4 +-
 .../cloud/vm/snapshot/VMSnapshotManagerImpl.java   |    2 +-
 .../cloud/vm/snapshot/dao/VMSnapshotDaoImpl.java   |    2 +-
 .../test/com/cloud/vpc/dao/MockNetworkDaoImpl.java |    2 +-
 setup/db/db/schema-410to420.sql                    |    5 ++
 utils/src/com/cloud/utils/fsm/StateDao.java        |    2 +-
 utils/src/com/cloud/utils/fsm/StateListener.java   |    4 +-
 utils/src/com/cloud/utils/fsm/StateMachine2.java   |    8 +-
 42 files changed, 125 insertions(+), 55 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/api/src/com/cloud/vm/VirtualMachine.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/vm/VirtualMachine.java 
b/api/src/com/cloud/vm/VirtualMachine.java
index 8f807d4..62d5eeb 100755
--- a/api/src/com/cloud/vm/VirtualMachine.java
+++ b/api/src/com/cloud/vm/VirtualMachine.java
@@ -159,6 +159,7 @@ public interface VirtualMachine extends RunningOn, 
ControlledEntity, Identity, I
     }
 
     public enum Event {
+       OperationNop,
         CreateRequested,
         StartRequested,
         StopRequested,
@@ -202,6 +203,12 @@ public interface VirtualMachine extends RunningOn, 
ControlledEntity, Identity, I
             return false;
         }
     }
+    
+    public enum PowerState {
+       PowerUnknown,
+       PowerOn,
+       PowerOff,
+    }
 
     /**
      * @return The name of the vm instance used by the cloud stack to uniquely

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/core/src/com/cloud/vm/VMInstanceVO.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/vm/VMInstanceVO.java 
b/core/src/com/cloud/vm/VMInstanceVO.java
index 5ec2712..adf6445 100644
--- a/core/src/com/cloud/vm/VMInstanceVO.java
+++ b/core/src/com/cloud/vm/VMInstanceVO.java
@@ -37,6 +37,7 @@ import javax.persistence.TemporalType;
 import javax.persistence.Transient;
 
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.utils.DateUtil;
 import com.cloud.utils.db.Encrypt;
 import com.cloud.utils.db.GenericDao;
 import com.cloud.utils.db.StateMachine;
@@ -95,6 +96,21 @@ public class VMInstanceVO implements VirtualMachine, 
FiniteStateObject<State, Vi
     @Column(name="last_host_id", updatable=true, nullable=true)
     protected Long lastHostId;
 
+    @Enumerated(value=EnumType.STRING)
+    @Column(name="last_event", updatable=true)
+    protected VirtualMachine.Event lastEvent;
+    
+    @Column(name="last_event_args", updatable=true, nullable=true)
+    protected String lastEventArgs;
+    
+    @Enumerated(value=EnumType.STRING)
+    @Column(name="power_state", updatable=true)
+    protected PowerState powerState;
+    
+    @Column(name="power_state_update_time", updatable = true, nullable=false)
+    @Temporal(value=TemporalType.TIMESTAMP)
+    protected Date powerStateUpdateTime;
+    
     @Column(name="pod_id", updatable=true, nullable=false)
     protected Long podIdToDeployIn;
 
@@ -184,6 +200,10 @@ public class VMInstanceVO implements VirtualMachine, 
FiniteStateObject<State, Vi
         this.serviceOfferingId = serviceOfferingId;
         this.hypervisorType = hypervisorType;
         this.limitCpuUse = false;
+        
+        this.lastEvent = Event.OperationNop;
+        this.powerState = PowerState.PowerUnknown;
+        this.powerStateUpdateTime = DateUtil.currentGMTTime();
     }
 
     public VMInstanceVO(long id,
@@ -201,6 +221,10 @@ public class VMInstanceVO implements VirtualMachine, 
FiniteStateObject<State, Vi
         this(id, serviceOfferingId, name, instanceName, type, vmTemplateId, 
hypervisorType, guestOSId, domainId, accountId, haEnabled);
         this.limitCpuUse = limitResourceUse;
         this.diskOfferingId = diskOfferingId;
+
+        this.lastEvent = Event.OperationNop;
+        this.powerState = PowerState.PowerUnknown;
+        this.powerStateUpdateTime = DateUtil.currentGMTTime();
     }
 
     protected VMInstanceVO() {
@@ -478,5 +502,36 @@ public class VMInstanceVO implements VirtualMachine, 
FiniteStateObject<State, Vi
        public Long getDiskOfferingId() {
                return diskOfferingId;
        }
-
+       
+       public VirtualMachine.Event getLastEvent() {
+               return lastEvent;
+       }
+       
+       public void setLastEvent(VirtualMachine.Event event) {
+               this.lastEvent = event;
+       }
+       
+       public String getLastEventArgs() {
+               return this.lastEventArgs;
+       }
+       
+       public void setLastEventArgs(String eventArgs) {
+               this.lastEventArgs = eventArgs;
+       }
+       
+       public VirtualMachine.PowerState getPowerState() {
+               return this.powerState;
+       }
+       
+       public void setPowerState(PowerState powerState) {
+               this.powerState = powerState;
+       }
+       
+       public Date getPowerStateUpdateTime() {
+               return this.powerStateUpdateTime;
+       }
+    
+       public void setPowerStateUpdateTime(Date updateTime) {
+               this.powerStateUpdateTime = updateTime;
+       }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceManagerImpl.java
----------------------------------------------------------------------
diff --git 
a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceManagerImpl.java
 
b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceManagerImpl.java
index c267e55..d79b10f 100644
--- 
a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceManagerImpl.java
+++ 
b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceManagerImpl.java
@@ -72,13 +72,13 @@ public class DataCenterResourceManagerImpl implements 
DataCenterResourceManager
        public boolean changeState(DataCenterResourceEntity entity, Event 
event) throws NoTransitionException {
 
                if(entity instanceof ZoneEntity){
-                       return _stateMachine.transitTo(entity, event, null, 
_dataCenterDao);
+                       return _stateMachine.transitTo(entity, event, null, 
null, _dataCenterDao);
                }else if(entity instanceof PodEntity){
-                       return _stateMachine.transitTo(entity, event, null, 
_podDao);
+                       return _stateMachine.transitTo(entity, event, null, 
null, _podDao);
                }else if(entity instanceof ClusterEntity){
-                       return _stateMachine.transitTo(entity, event, null, 
_clusterDao);
+                       return _stateMachine.transitTo(entity, event, null, 
null, _clusterDao);
                }else if(entity instanceof HostEntity){
-                       return _stateMachine.transitTo(entity, event, null, 
_hostDao);
+                       return _stateMachine.transitTo(entity, event, null, 
null, _hostDao);
                }
 
                return false;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineClusterDaoImpl.java
----------------------------------------------------------------------
diff --git 
a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineClusterDaoImpl.java
 
b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineClusterDaoImpl.java
index 1f0bd4d..efc6056 100644
--- 
a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineClusterDaoImpl.java
+++ 
b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineClusterDaoImpl.java
@@ -253,7 +253,7 @@ public class EngineClusterDaoImpl extends 
GenericDaoBase<EngineClusterVO, Long>
     }
 
        @Override
-       public boolean updateState(State currentState, Event event, State 
nextState, DataCenterResourceEntity clusterEntity, Object data) {
+       public boolean updateState(State currentState, Event event, State 
nextState, DataCenterResourceEntity clusterEntity, String eventArgs, Object 
data) {
                
                EngineClusterVO vo = findById(clusterEntity.getId());
                

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineDataCenterDaoImpl.java
----------------------------------------------------------------------
diff --git 
a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineDataCenterDaoImpl.java
 
b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineDataCenterDaoImpl.java
index f99bc6c..d03739b 100644
--- 
a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineDataCenterDaoImpl.java
+++ 
b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineDataCenterDaoImpl.java
@@ -291,7 +291,7 @@ public class EngineDataCenterDaoImpl extends 
GenericDaoBase<EngineDataCenterVO,
 
 
     @Override
-    public boolean updateState(State currentState, Event event, State 
nextState, DataCenterResourceEntity zoneEntity, Object data) {
+    public boolean updateState(State currentState, Event event, State 
nextState, DataCenterResourceEntity zoneEntity, String eventArgs, Object data) {
 
         EngineDataCenterVO vo = findById(zoneEntity.getId());
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostDaoImpl.java
----------------------------------------------------------------------
diff --git 
a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostDaoImpl.java
 
b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostDaoImpl.java
index 3c34023..bb8bd4d 100644
--- 
a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostDaoImpl.java
+++ 
b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostDaoImpl.java
@@ -645,7 +645,7 @@ public class EngineHostDaoImpl extends 
GenericDaoBase<EngineHostVO, Long> implem
 
 
     @Override
-    public boolean updateState(State currentState, 
DataCenterResourceEntity.State.Event event, State nextState, 
DataCenterResourceEntity hostEntity, Object data) {
+    public boolean updateState(State currentState, 
DataCenterResourceEntity.State.Event event, State nextState, 
DataCenterResourceEntity hostEntity, String eventArgs, Object data) {
         EngineHostVO vo = findById(hostEntity.getId());
         Date oldUpdatedTime = vo.getLastUpdated();
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostPodDaoImpl.java
----------------------------------------------------------------------
diff --git 
a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostPodDaoImpl.java
 
b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostPodDaoImpl.java
index fee083a..c56d896 100644
--- 
a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostPodDaoImpl.java
+++ 
b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostPodDaoImpl.java
@@ -148,7 +148,7 @@ public class EngineHostPodDaoImpl extends 
GenericDaoBase<EngineHostPodVO, Long>
 
 
        @Override
-       public boolean updateState(State currentState, Event event, State 
nextState, DataCenterResourceEntity podEntity, Object data) {
+       public boolean updateState(State currentState, Event event, State 
nextState, DataCenterResourceEntity podEntity, String eventArgs, Object data) {
                
                EngineHostPodVO vo = findById(podEntity.getId());
                

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/engine/storage/image/src/org/apache/cloudstack/storage/image/store/TemplateObject.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/image/src/org/apache/cloudstack/storage/image/store/TemplateObject.java
 
b/engine/storage/image/src/org/apache/cloudstack/storage/image/store/TemplateObject.java
index b6c2004..d3db71a 100644
--- 
a/engine/storage/image/src/org/apache/cloudstack/storage/image/store/TemplateObject.java
+++ 
b/engine/storage/image/src/org/apache/cloudstack/storage/image/store/TemplateObject.java
@@ -165,7 +165,7 @@ public class TemplateObject implements TemplateInfo {
     }
 
     public boolean stateTransit(TemplateEvent e) throws NoTransitionException {
-        boolean result= imageMgr.getStateMachine().transitTo(this.imageVO, e, 
null,
+        boolean result= imageMgr.getStateMachine().transitTo(this.imageVO, e, 
null, null,
                 imageDao);
         this.imageVO = imageDao.findById(this.imageVO.getId());
         return result;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotStateMachineManagerImpl.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotStateMachineManagerImpl.java
 
b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotStateMachineManagerImpl.java
index aa1cf68..b7abc7d 100644
--- 
a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotStateMachineManagerImpl.java
+++ 
b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotStateMachineManagerImpl.java
@@ -49,6 +49,6 @@ SnapshotStateMachineManager {
        }
        
        public void processEvent(SnapshotVO snapshot, Event event) throws 
NoTransitionException {
-               stateMachine.transitTo(snapshot, event, null, snapshotDao);
+               stateMachine.transitTo(snapshot, event, null, null, 
snapshotDao);
        }
 } 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java
 
b/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java
index 87ba1d2..f4408af 100644
--- 
a/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java
+++ 
b/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java
@@ -135,7 +135,7 @@ public class ObjectInDataStoreManagerImpl implements 
ObjectInDataStoreManager {
         
         if (data.getType() == DataObjectType.TEMPLATE && 
data.getDataStore().getRole() == DataStoreRole.Primary) {
             try {
-            this.stateMachines.transitTo(obj, event, null,
+            this.stateMachines.transitTo(obj, event, null, null,
                     templatePoolDao);
             } catch (NoTransitionException e) {
                 if (event == Event.CreateOnlyRequested || event == 
Event.OperationSuccessed) {
@@ -145,7 +145,7 @@ public class ObjectInDataStoreManagerImpl implements 
ObjectInDataStoreManager {
                 }
             }
         } else {
-            this.stateMachines.transitTo(obj, event, null, objectDataStoreDao);
+            this.stateMachines.transitTo(obj, event, null, null, 
objectDataStoreDao);
         }
         return true;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDaoImpl.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDaoImpl.java
 
b/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDaoImpl.java
index 9965d60..bebf150 100644
--- 
a/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDaoImpl.java
+++ 
b/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDaoImpl.java
@@ -49,7 +49,7 @@ public class ObjectInDataStoreDaoImpl extends 
GenericDaoBase<ObjectInDataStoreVO
     }
     @Override
     public boolean updateState(State currentState, Event event,
-            State nextState, DataObjectInStore dataObj, Object data) {
+            State nextState, DataObjectInStore dataObj, String eventArgs, 
Object data) {
         ObjectInDataStoreVO vo = (ObjectInDataStoreVO)dataObj;
         Long oldUpdated = vo.getUpdatedCount();
         Date oldUpdatedTime = vo.getUpdated();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreDaoImpl.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreDaoImpl.java
 
b/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreDaoImpl.java
index ad56150..b4cfd77 100644
--- 
a/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreDaoImpl.java
+++ 
b/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreDaoImpl.java
@@ -63,7 +63,7 @@ public class TemplatePrimaryDataStoreDaoImpl extends 
GenericDaoBase<TemplatePrim
     }
 
     @Override
-    public boolean updateState(State currentState, Event event, State 
nextState, TemplatePrimaryDataStoreVO vo, Object data) {
+    public boolean updateState(State currentState, Event event, State 
nextState, TemplatePrimaryDataStoreVO vo, String eventArgs, Object data) {
         Long oldUpdated = vo.getUpdatedCount();
         Date oldUpdatedTime = vo.getLastUpdated();
         

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2Impl.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2Impl.java
 
b/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2Impl.java
index d8497e2..7f40388 100644
--- 
a/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2Impl.java
+++ 
b/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2Impl.java
@@ -338,7 +338,7 @@ public class VolumeDao2Impl extends 
GenericDaoBase<VolumeVO, Long> implements Vo
     }
 
     @Override
-    public boolean updateState(Volume.State currentState, Volume.Event event, 
Volume.State nextState, VolumeVO vo, Object data) {
+    public boolean updateState(Volume.State currentState, Volume.Event event, 
Volume.State nextState, VolumeVO vo, String eventArgs, Object data) {
 
         Long oldUpdated = vo.getUpdatedCount();
         Date oldUpdatedTime = vo.getUpdated();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java
 
b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java
index ceadb25..e0c50ff 100644
--- 
a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java
+++ 
b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java
@@ -99,7 +99,7 @@ public class VolumeObject implements VolumeInfo {
     public boolean stateTransit(Volume.Event event) {
         boolean result = false;
         try {
-            result = _volStateMachine.transitTo(volumeVO, event, null, 
volumeDao);
+            result = _volStateMachine.transitTo(volumeVO, event, null, null, 
volumeDao);
             volumeVO = volumeDao.findById(volumeVO.getId());
         } catch (NoTransitionException e) {
             String errorMessage = "Failed to transit volume: " + 
this.getVolumeId() + ", due to: " + e.toString();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManagerImpl.java
----------------------------------------------------------------------
diff --git 
a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManagerImpl.java
 
b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManagerImpl.java
index b41d6ca..b5fdc9f 100755
--- 
a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManagerImpl.java
+++ 
b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManagerImpl.java
@@ -77,12 +77,12 @@ public class BaremetalManagerImpl extends ManagerBase 
implements BaremetalManage
        }
 
        @Override
-    public boolean preStateTransitionEvent(State oldState, Event event, State 
newState, VirtualMachine vo, boolean status, Object opaque) {
+    public boolean preStateTransitionEvent(State oldState, Event event, State 
newState, VirtualMachine vo, boolean status, String eventArgs, Object opaque) {
            return false;
     }
 
        @Override
-    public boolean postStateTransitionEvent(State oldState, Event event, State 
newState, VirtualMachine vo, boolean status, Object opaque) {
+    public boolean postStateTransitionEvent(State oldState, Event event, State 
newState, VirtualMachine vo, boolean status, String eventArgs, Object opaque) {
                if (newState != State.Starting && newState != State.Error && 
newState != State.Expunging) {
                        return true;
                }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/plugins/network-elements/midonet/test/com/cloud/network/element/MidoNetElementTest.java
----------------------------------------------------------------------
diff --git 
a/plugins/network-elements/midonet/test/com/cloud/network/element/MidoNetElementTest.java
 
b/plugins/network-elements/midonet/test/com/cloud/network/element/MidoNetElementTest.java
index aec9c2d..1096acd 100644
--- 
a/plugins/network-elements/midonet/test/com/cloud/network/element/MidoNetElementTest.java
+++ 
b/plugins/network-elements/midonet/test/com/cloud/network/element/MidoNetElementTest.java
@@ -16,6 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+package com.cloud.network.element;
 
 import com.cloud.network.element.MidoNetElement;
 import junit.framework.TestCase;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/server/src/com/cloud/agent/manager/AgentManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/agent/manager/AgentManagerImpl.java 
b/server/src/com/cloud/agent/manager/AgentManagerImpl.java
index 6baeecf..3b69738 100755
--- a/server/src/com/cloud/agent/manager/AgentManagerImpl.java
+++ b/server/src/com/cloud/agent/manager/AgentManagerImpl.java
@@ -1429,7 +1429,7 @@ public class AgentManagerImpl extends ManagerBase 
implements AgentManager, Handl
 
             host.setManagementServerId(msId);
             try {
-                return _statusStateMachine.transitTo(host, e, host.getId(), 
_hostDao);
+                return _statusStateMachine.transitTo(host, e, null, 
host.getId(), _hostDao);
             } catch (NoTransitionException e1) {
                 status_logger.debug("Cannot transit agent status with event " 
+ e + " for host " + host.getId() + ", name=" + host.getName()
                         + ", mangement server id is " + msId);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/server/src/com/cloud/capacity/CapacityManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/capacity/CapacityManagerImpl.java 
b/server/src/com/cloud/capacity/CapacityManagerImpl.java
index 292ef0a..1e80a8e 100755
--- a/server/src/com/cloud/capacity/CapacityManagerImpl.java
+++ b/server/src/com/cloud/capacity/CapacityManagerImpl.java
@@ -629,12 +629,12 @@ public class CapacityManagerImpl extends ManagerBase 
implements CapacityManager,
     }
     
     @Override
-    public boolean preStateTransitionEvent(State oldState, Event event, State 
newState, VirtualMachine vm, boolean transitionStatus, Object opaque) {
+    public boolean preStateTransitionEvent(State oldState, Event event, State 
newState, VirtualMachine vm, boolean transitionStatus, String eventArgs, Object 
opaque) {
         return true;
     }
 
     @Override
-    public boolean postStateTransitionEvent(State oldState, Event event, State 
newState, VirtualMachine vm, boolean status, Object opaque) {
+    public boolean postStateTransitionEvent(State oldState, Event event, State 
newState, VirtualMachine vm, boolean status, String eventArgs, Object opaque) {
         if (!status) {
             return false;
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/server/src/com/cloud/host/dao/HostDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/host/dao/HostDaoImpl.java 
b/server/src/com/cloud/host/dao/HostDaoImpl.java
index 07a4232..de7a2bb 100755
--- a/server/src/com/cloud/host/dao/HostDaoImpl.java
+++ b/server/src/com/cloud/host/dao/HostDaoImpl.java
@@ -781,7 +781,7 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, 
Long> implements HostDao
 
 
        @Override
-       public boolean updateState(Status oldStatus, Event event, Status 
newStatus, Host vo, Object data) {
+       public boolean updateState(Status oldStatus, Event event, Status 
newStatus, Host vo, String eventArgs, Object data) {
                HostVO host = findById(vo.getId());
                long oldPingTime = host.getLastPinged();
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/server/src/com/cloud/network/NetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java 
b/server/src/com/cloud/network/NetworkManagerImpl.java
index 6296011..bd0e847 100755
--- a/server/src/com/cloud/network/NetworkManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkManagerImpl.java
@@ -3648,7 +3648,7 @@ public class NetworkManagerImpl extends ManagerBase 
implements NetworkManager, L
 
 
     protected boolean stateTransitTo(NetworkVO network, Network.Event e) 
throws NoTransitionException {
-        return _stateMachine.transitTo(network, e, null, _networksDao);
+        return _stateMachine.transitTo(network, e, null, null, _networksDao);
     }
 
     private void setStateMachine() {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/server/src/com/cloud/network/NetworkStateListener.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkStateListener.java 
b/server/src/com/cloud/network/NetworkStateListener.java
index 038e769..cc875b4 100644
--- a/server/src/com/cloud/network/NetworkStateListener.java
+++ b/server/src/com/cloud/network/NetworkStateListener.java
@@ -49,13 +49,13 @@ public class NetworkStateListener implements 
StateListener<State, Event, Network
     }
 
     @Override
-    public boolean preStateTransitionEvent(State oldState, Event event, State 
newState, Network vo, boolean status, Object opaque) {
+    public boolean preStateTransitionEvent(State oldState, Event event, State 
newState, Network vo, boolean status, String eventArgs, Object opaque) {
         pubishOnEventBus(event.name(), "preStateTransitionEvent", vo, 
oldState, newState);
         return true;
     }
 
     @Override
-    public boolean postStateTransitionEvent(State oldState, Event event, State 
newState, Network vo, boolean status, Object opaque) {
+    public boolean postStateTransitionEvent(State oldState, Event event, State 
newState, Network vo, boolean status, String eventArgs, Object opaque) {
         pubishOnEventBus(event.name(), "postStateTransitionEvent", vo, 
oldState, newState);
         return true;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/server/src/com/cloud/network/dao/NetworkDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/dao/NetworkDaoImpl.java 
b/server/src/com/cloud/network/dao/NetworkDaoImpl.java
index 1bc8973..13e5193 100644
--- a/server/src/com/cloud/network/dao/NetworkDaoImpl.java
+++ b/server/src/com/cloud/network/dao/NetworkDaoImpl.java
@@ -587,7 +587,7 @@ public class NetworkDaoImpl extends 
GenericDaoBase<NetworkVO, Long> implements N
     }
 
     @Override
-    public boolean updateState(State currentState, Event event, State 
nextState, Network vo, Object data) {
+    public boolean updateState(State currentState, Event event, State 
nextState, Network vo, String eventArgs, Object data) {
        // TODO: ensure this update is correct
        Transaction txn = Transaction.currentTxn();
        txn.start();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java
----------------------------------------------------------------------
diff --git 
a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java 
b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java
index 1c189c4..cbf9f79 100755
--- a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java
+++ b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java
@@ -1217,12 +1217,12 @@ public class SecurityGroupManagerImpl extends 
ManagerBase implements SecurityGro
     }
 
     @Override
-    public boolean preStateTransitionEvent(State oldState, Event event, State 
newState, VirtualMachine vo, boolean status, Object opaque) {
+    public boolean preStateTransitionEvent(State oldState, Event event, State 
newState, VirtualMachine vo, boolean status, String eventArgs, Object opaque) {
         return true;
     }
 
     @Override
-    public boolean postStateTransitionEvent(State oldState, Event event, State 
newState, VirtualMachine vm, boolean status, Object opaque) {
+    public boolean postStateTransitionEvent(State oldState, Event event, State 
newState, VirtualMachine vm, boolean status, String eventArgs, Object opaque) {
         if (!status) {
             return false;
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/server/src/com/cloud/storage/VolumeManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/VolumeManagerImpl.java 
b/server/src/com/cloud/storage/VolumeManagerImpl.java
index 8c63eb0..24d568b 100644
--- a/server/src/com/cloud/storage/VolumeManagerImpl.java
+++ b/server/src/com/cloud/storage/VolumeManagerImpl.java
@@ -2364,7 +2364,7 @@ public class VolumeManagerImpl extends ManagerBase 
implements VolumeManager {
  
     private boolean stateTransitTo(Volume vol, Volume.Event event)
             throws NoTransitionException {
-        return _volStateMachine.transitTo(vol, event, null, _volsDao);
+        return _volStateMachine.transitTo(vol, event, null, null, _volsDao);
     }
 
     

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java 
b/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java
index f55663f..c7558f3 100644
--- a/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java
+++ b/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java
@@ -333,7 +333,7 @@ public class SnapshotDaoImpl extends 
GenericDaoBase<SnapshotVO, Long> implements
     }
 
     @Override
-    public boolean updateState(State currentState, Event event, State 
nextState, SnapshotVO snapshot, Object data) {
+    public boolean updateState(State currentState, Event event, State 
nextState, SnapshotVO snapshot, String eventArgs, Object data) {
         Transaction txn = Transaction.currentTxn();
         txn.start();
         SnapshotVO snapshotVO = (SnapshotVO)snapshot;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java 
b/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
index d9a26d3..7261894 100755
--- a/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
+++ b/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
@@ -1086,7 +1086,7 @@ public class VMTemplateDaoImpl extends 
GenericDaoBase<VMTemplateVO, Long> implem
 
     @Override
     public boolean updateState(TemplateState currentState, TemplateEvent event,
-            TemplateState nextState, VMTemplateVO vo, Object data) {
+            TemplateState nextState, VMTemplateVO vo, String eventArgs, Object 
data) {
         Long oldUpdated = vo.getUpdatedCount();
         Date oldUpdatedTime = vo.getUpdated();
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/server/src/com/cloud/storage/dao/VMTemplateHostDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/dao/VMTemplateHostDaoImpl.java 
b/server/src/com/cloud/storage/dao/VMTemplateHostDaoImpl.java
index 7f35eab..b8365fb 100755
--- a/server/src/com/cloud/storage/dao/VMTemplateHostDaoImpl.java
+++ b/server/src/com/cloud/storage/dao/VMTemplateHostDaoImpl.java
@@ -389,7 +389,7 @@ public class VMTemplateHostDaoImpl extends 
GenericDaoBase<VMTemplateHostVO, Long
     
     @Override
     public boolean updateState(State currentState, Event event,
-            State nextState, DataObjectInStore vo, Object data) {
+            State nextState, DataObjectInStore vo, String eventArgs, Object 
data) {
         VMTemplateHostVO templateHost = (VMTemplateHostVO)vo;
         Long oldUpdated = templateHost.getUpdatedCount();
         Date oldUpdatedTime = templateHost.getUpdated();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/server/src/com/cloud/storage/dao/VMTemplatePoolDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/dao/VMTemplatePoolDaoImpl.java 
b/server/src/com/cloud/storage/dao/VMTemplatePoolDaoImpl.java
index 5f212eb..43d537d 100644
--- a/server/src/com/cloud/storage/dao/VMTemplatePoolDaoImpl.java
+++ b/server/src/com/cloud/storage/dao/VMTemplatePoolDaoImpl.java
@@ -267,7 +267,7 @@ public class VMTemplatePoolDaoImpl extends 
GenericDaoBase<VMTemplateStoragePoolV
 
     @Override
     public boolean updateState(State currentState, Event event,
-            State nextState, DataObjectInStore vo, Object data) {
+            State nextState, DataObjectInStore vo, String eventArgs, Object 
data) {
         VMTemplateStoragePoolVO templatePool = (VMTemplateStoragePoolVO)vo;
         Long oldUpdated = templatePool.getUpdatedCount();
         Date oldUpdatedTime = templatePool.getUpdated();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/server/src/com/cloud/storage/dao/VolumeDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/dao/VolumeDaoImpl.java 
b/server/src/com/cloud/storage/dao/VolumeDaoImpl.java
index 12ca3c7..c96b48b 100755
--- a/server/src/com/cloud/storage/dao/VolumeDaoImpl.java
+++ b/server/src/com/cloud/storage/dao/VolumeDaoImpl.java
@@ -377,7 +377,7 @@ public class VolumeDaoImpl extends GenericDaoBase<VolumeVO, 
Long> implements Vol
        @Override
        public boolean updateState(com.cloud.storage.Volume.State currentState,
                        Event event, com.cloud.storage.Volume.State nextState, 
Volume vo,
-                       Object data) {
+                       String eventArgs, Object data) {
                
                Long oldUpdated = vo.getUpdatedCount();
                Date oldUpdatedTime = vo.getUpdated();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/server/src/com/cloud/storage/dao/VolumeHostDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/dao/VolumeHostDaoImpl.java 
b/server/src/com/cloud/storage/dao/VolumeHostDaoImpl.java
index 2fd39e6..063ae98 100755
--- a/server/src/com/cloud/storage/dao/VolumeHostDaoImpl.java
+++ b/server/src/com/cloud/storage/dao/VolumeHostDaoImpl.java
@@ -127,7 +127,7 @@ public class VolumeHostDaoImpl extends 
GenericDaoBase<VolumeHostVO, Long> implem
 
     @Override
     public boolean updateState(State currentState, Event event,
-            State nextState, DataObjectInStore vo, Object data) {
+            State nextState, DataObjectInStore vo, String eventArgs, Object 
data) {
         VolumeHostVO volHost = (VolumeHostVO) vo;
         Long oldUpdated = volHost.getUpdatedCount();
         Date oldUpdatedTime = volHost.getUpdated();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/server/src/com/cloud/storage/listener/SnapshotStateListener.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/listener/SnapshotStateListener.java 
b/server/src/com/cloud/storage/listener/SnapshotStateListener.java
index 21fcf11..ccae9dd 100644
--- a/server/src/com/cloud/storage/listener/SnapshotStateListener.java
+++ b/server/src/com/cloud/storage/listener/SnapshotStateListener.java
@@ -48,13 +48,13 @@ public class SnapshotStateListener implements 
StateListener<State, Event, Snapsh
     }
 
     @Override
-    public boolean preStateTransitionEvent(State oldState, Event event, State 
newState, SnapshotVO vo, boolean status, Object opaque) {
+    public boolean preStateTransitionEvent(State oldState, Event event, State 
newState, SnapshotVO vo, boolean status, String eventArgs, Object opaque) {
         pubishOnEventBus(event.name(), "preStateTransitionEvent", vo, 
oldState, newState);
         return true;
     }
 
     @Override
-    public boolean postStateTransitionEvent(State oldState, Event event, State 
newState, SnapshotVO vo, boolean status, Object opaque) {
+    public boolean postStateTransitionEvent(State oldState, Event event, State 
newState, SnapshotVO vo, boolean status, String eventArgs, Object opaque) {
         pubishOnEventBus(event.name(), "postStateTransitionEvent", vo, 
oldState, newState);
         return true;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/server/src/com/cloud/storage/listener/VolumeStateListener.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/listener/VolumeStateListener.java 
b/server/src/com/cloud/storage/listener/VolumeStateListener.java
index 6fa56a5..fa6d6fd 100644
--- a/server/src/com/cloud/storage/listener/VolumeStateListener.java
+++ b/server/src/com/cloud/storage/listener/VolumeStateListener.java
@@ -43,13 +43,13 @@ public class VolumeStateListener implements 
StateListener<State, Event, Volume>
     }
 
     @Override
-    public boolean preStateTransitionEvent(State oldState, Event event, State 
newState, Volume vo, boolean status, Object opaque) {
+    public boolean preStateTransitionEvent(State oldState, Event event, State 
newState, Volume vo, boolean status, String eventArgs, Object opaque) {
         pubishOnEventBus(event.name(), "preStateTransitionEvent", vo, 
oldState, newState);
         return true;
     }
 
     @Override
-    public boolean postStateTransitionEvent(State oldState, Event event, State 
newState, Volume vo, boolean status, Object opaque) {
+    public boolean postStateTransitionEvent(State oldState, Event event, State 
newState, Volume vo, boolean status, String eventArgs, Object opaque) {
         pubishOnEventBus(event.name(), "postStateTransitionEvent", vo, 
oldState, newState);
         return true;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/server/src/com/cloud/vm/UserVmStateListener.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/UserVmStateListener.java 
b/server/src/com/cloud/vm/UserVmStateListener.java
index 04aa818..92aa6ad 100644
--- a/server/src/com/cloud/vm/UserVmStateListener.java
+++ b/server/src/com/cloud/vm/UserVmStateListener.java
@@ -54,13 +54,13 @@ public class UserVmStateListener implements 
StateListener<State, VirtualMachine.
     }
     
     @Override
-    public boolean preStateTransitionEvent(State oldState, Event event, State 
newState, VirtualMachine vo, boolean status, Object opaque) {
+    public boolean preStateTransitionEvent(State oldState, Event event, State 
newState, VirtualMachine vo, boolean status, String eventArgs, Object opaque) {
         pubishOnEventBus(event.name(), "preStateTransitionEvent", vo, 
oldState, newState);
         return true;
     }
 
     @Override
-    public boolean postStateTransitionEvent(State oldState, Event event, State 
newState, VirtualMachine vo, boolean status, Object opaque) {
+    public boolean postStateTransitionEvent(State oldState, Event event, State 
newState, VirtualMachine vo, boolean status, String eventArgs, Object opaque) {
         if(!status){
             return false;
         }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java 
b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
index af22716..a07297b 100755
--- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -1134,7 +1134,7 @@ public class VirtualMachineManagerImpl extends 
ManagerBase implements VirtualMac
 
     protected boolean stateTransitTo(VMInstanceVO vm, VirtualMachine.Event e, 
Long hostId, String reservationId) throws NoTransitionException {
         vm.setReservationId(reservationId);
-        return _stateMachine.transitTo(vm, e, new Pair<Long, 
Long>(vm.getHostId(), hostId), _vmDao);
+        return _stateMachine.transitTo(vm, e, null, new Pair<Long, 
Long>(vm.getHostId(), hostId), _vmDao);
     }
 
     @Override
@@ -1155,7 +1155,7 @@ public class VirtualMachineManagerImpl extends 
ManagerBase implements VirtualMac
                 vm.setLastHostId(vm.getHostId());
             }
         }
-        return _stateMachine.transitTo(vm, e, new Pair<Long, 
Long>(vm.getHostId(), hostId), _vmDao);
+        return _stateMachine.transitTo(vm, e, null, new Pair<Long, 
Long>(vm.getHostId(), hostId), _vmDao);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/server/src/com/cloud/vm/dao/VMInstanceDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/dao/VMInstanceDaoImpl.java 
b/server/src/com/cloud/vm/dao/VMInstanceDaoImpl.java
index 7198b7c..7a9ddba 100644
--- a/server/src/com/cloud/vm/dao/VMInstanceDaoImpl.java
+++ b/server/src/com/cloud/vm/dao/VMInstanceDaoImpl.java
@@ -358,7 +358,7 @@ public class VMInstanceDaoImpl extends 
GenericDaoBase<VMInstanceVO, Long> implem
     }
 
     @Override
-    public boolean updateState(State oldState, Event event,    State newState, 
VirtualMachine vm, Object opaque) {
+    public boolean updateState(State oldState, Event event,    State newState, 
VirtualMachine vm, String eventArgs, Object opaque) {
        if (newState == null) {
                if (s_logger.isDebugEnabled()) {
                        s_logger.debug("There's no way to transition from old 
state: " + oldState.toString() + " event: " + event.toString());
@@ -388,6 +388,8 @@ public class VMInstanceDaoImpl extends 
GenericDaoBase<VMInstanceVO, Long> implem
        ub.set(vmi, "hostId", newHostId);
        ub.set(vmi, "podIdToDeployIn", vmi.getPodIdToDeployIn());
        ub.set(vmi, _updateTimeAttr, new Date());
+       ub.set(vmi,  "lastEvent", event);
+       ub.set(vmi,  "lastEventArgs", eventArgs);
 
        int result = update(vmi, sc);
        if (result == 0 && s_logger.isDebugEnabled()) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java 
b/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
index 638be6c..d30490a 100644
--- a/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
+++ b/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
@@ -433,7 +433,7 @@ public class VMSnapshotManagerImpl extends ManagerBase 
implements VMSnapshotMana
     }
 
     protected boolean vmSnapshotStateTransitTo(VMSnapshotVO vsnp, 
VMSnapshot.Event event) throws NoTransitionException {
-        return _vmSnapshottateMachine.transitTo(vsnp, event, null, 
_vmSnapshotDao);
+        return _vmSnapshottateMachine.transitTo(vsnp, event, null, null, 
_vmSnapshotDao);
     }
     
     @DB

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/server/src/com/cloud/vm/snapshot/dao/VMSnapshotDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/snapshot/dao/VMSnapshotDaoImpl.java 
b/server/src/com/cloud/vm/snapshot/dao/VMSnapshotDaoImpl.java
index 7d8ace7..b027a38 100644
--- a/server/src/com/cloud/vm/snapshot/dao/VMSnapshotDaoImpl.java
+++ b/server/src/com/cloud/vm/snapshot/dao/VMSnapshotDaoImpl.java
@@ -127,7 +127,7 @@ public class VMSnapshotDaoImpl extends 
GenericDaoBase<VMSnapshotVO, Long>
     }
 
     @Override
-    public boolean updateState(State currentState, Event event, State 
nextState, VMSnapshot vo, Object data) {
+    public boolean updateState(State currentState, Event event, State 
nextState, VMSnapshot vo, String eventArgs, Object data) {
         
         Long oldUpdated = vo.getUpdatedCount();
         Date oldUpdatedTime = vo.getUpdated();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/server/test/com/cloud/vpc/dao/MockNetworkDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vpc/dao/MockNetworkDaoImpl.java 
b/server/test/com/cloud/vpc/dao/MockNetworkDaoImpl.java
index a483291..1088a66 100644
--- a/server/test/com/cloud/vpc/dao/MockNetworkDaoImpl.java
+++ b/server/test/com/cloud/vpc/dao/MockNetworkDaoImpl.java
@@ -343,7 +343,7 @@ public class MockNetworkDaoImpl extends 
GenericDaoBase<NetworkVO, Long> implemen
     }
 
     @Override
-    public boolean updateState(Network.State currentState, Network.Event 
event, Network.State nextState, Network vo, Object data) {
+    public boolean updateState(Network.State currentState, Network.Event 
event, Network.State nextState, Network vo, String eventArgs, Object data) {
         return true;
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/setup/db/db/schema-410to420.sql
----------------------------------------------------------------------
diff --git a/setup/db/db/schema-410to420.sql b/setup/db/db/schema-410to420.sql
index fecdc0f..a570747 100644
--- a/setup/db/db/schema-410to420.sql
+++ b/setup/db/db/schema-410to420.sql
@@ -410,3 +410,8 @@ ALTER TABLE `cloud`.`async_job` DROP COLUMN `session_key`;
 ALTER TABLE `cloud`.`async_job` DROP COLUMN `job_cmd_originator`;
 ALTER TABLE `cloud`.`async_job` ADD COLUMN `job_dispatcher` VARCHAR(64);
 
+ALTER TABLE `cloud`.`vm_instance` ADD COLUMN `last_event` VARCHAR(64) DEFAULT 
'OperationNop';
+ALTER TABLE `cloud`.`vm_instance` ADD COLUMN `last_event_args` VARCHAR(256);
+ALTER TABLE `cloud`.`vm_instance` ADD COLUMN `power_state` VARCHAR(74) DEFAULT 
'PowerUnknown';
+ALTER TABLE `cloud`.`vm_instance` ADD COLUMN `power_state_update_time` 
DATETIME DEFAULT NOW();
+

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/utils/src/com/cloud/utils/fsm/StateDao.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/fsm/StateDao.java 
b/utils/src/com/cloud/utils/fsm/StateDao.java
index 5c4cc41..4f42346 100644
--- a/utils/src/com/cloud/utils/fsm/StateDao.java
+++ b/utils/src/com/cloud/utils/fsm/StateDao.java
@@ -18,6 +18,6 @@ package com.cloud.utils.fsm;
 
 
 public interface StateDao <S,E,V> {
-       boolean updateState(S currentState, E event, S nextState, V vo, Object 
data);
+       boolean updateState(S currentState, E event, S nextState, V vo, String 
eventArgs, Object data);
 
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/utils/src/com/cloud/utils/fsm/StateListener.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/fsm/StateListener.java 
b/utils/src/com/cloud/utils/fsm/StateListener.java
index 7d4a85e..37c0a92 100644
--- a/utils/src/com/cloud/utils/fsm/StateListener.java
+++ b/utils/src/com/cloud/utils/fsm/StateListener.java
@@ -28,7 +28,7 @@ public interface StateListener <S,E,V> {
         * @param vmDao VM dao
         * @return
         */
-       public boolean preStateTransitionEvent(S oldState, E event, S newState, 
V vo, boolean status, Object opaque);
+       public boolean preStateTransitionEvent(S oldState, E event, S newState, 
V vo, boolean status, String eventArgs, Object opaque);
        
        /**
         * Event is triggered after state machine transition finished
@@ -39,5 +39,5 @@ public interface StateListener <S,E,V> {
      * @param status the state transition is allowed or not
         * @return
         */
-       public boolean postStateTransitionEvent(S oldState, E event, S 
newState, V vo, boolean status, Object opaque);
+       public boolean postStateTransitionEvent(S oldState, E event, S 
newState, V vo, boolean status, String eventArgs, Object opaque);
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58112a9e/utils/src/com/cloud/utils/fsm/StateMachine2.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/fsm/StateMachine2.java 
b/utils/src/com/cloud/utils/fsm/StateMachine2.java
index 741c58c..653696c 100644
--- a/utils/src/com/cloud/utils/fsm/StateMachine2.java
+++ b/utils/src/com/cloud/utils/fsm/StateMachine2.java
@@ -95,7 +95,7 @@ public class StateMachine2<S, E, V extends StateObject<S>> {
     }
     
  
-    public boolean transitTo(V vo, E e, Object opaque, StateDao<S,E,V> dao) 
throws NoTransitionException {
+    public boolean transitTo(V vo, E e, String eventArgs, Object opaque, 
StateDao<S,E,V> dao) throws NoTransitionException {
        S currentState = vo.getState();
        S nextState = getNextState(currentState, e);
 
@@ -105,16 +105,16 @@ public class StateMachine2<S, E, V extends 
StateObject<S>> {
        }
 
        for (StateListener<S,E, V> listener : _listeners) {
-               listener.preStateTransitionEvent(currentState, e, nextState, 
vo, transitionStatus, opaque);
+               listener.preStateTransitionEvent(currentState, e, nextState, 
vo, transitionStatus, eventArgs, opaque);
        }
        
-       transitionStatus = dao.updateState(currentState, e, nextState, vo, 
opaque);
+       transitionStatus = dao.updateState(currentState, e, nextState, vo, 
eventArgs, opaque);
        if (!transitionStatus) {
            return false;
        }
        
        for (StateListener<S,E, V> listener : _listeners) {
-            listener.postStateTransitionEvent(currentState, e, nextState, vo, 
transitionStatus, opaque);
+            listener.postStateTransitionEvent(currentState, e, nextState, vo, 
transitionStatus, eventArgs, opaque);
         }
        
        return true;

Reply via email to