diff --git a/compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java b/compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java index 18b40fda31d..e28e6f44beb 100755 --- a/compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.java @@ -326,6 +326,10 @@ protected VmInstanceVO changeVmStateInDb(VmInstanceStateEvent stateEvent) { } protected VmInstanceVO changeVmStateInDb(VmInstanceStateEvent stateEvent, Runnable runnable) { + return changeVmStateInDb(stateEvent, runnable, null); + } + + protected VmInstanceVO changeVmStateInDb(VmInstanceStateEvent stateEvent, Runnable runnable, String stateChangeSource) { VmInstanceState bs = self.getState(); final VmInstanceState state = self.getState().nextState(stateEvent); @@ -374,6 +378,7 @@ protected void scripts() { data.setVmUuid(self.getUuid()); data.setOldState(bs.toString()); data.setNewState(state.toString()); + data.setStateChangeSource(stateChangeSource); data.setInventory(getSelfInventory()); evtf.fire(VmCanonicalEvents.VM_FULL_STATE_CHANGED_PATH, data); @@ -1008,17 +1013,7 @@ public void done(ErrorCodeList errorCodeList) { String hostUuid = self.getHostUuid(); String suspectHostUuid = StringUtils.trimToNull(hostUuid); String peerHostUuid = StringUtils.trimToNull(msg.getAccessiblePeerHostUuid()); - UpdateQuery sql = SQL.New(VmInstanceVO.class) - .eq(VmInstanceVO_.uuid, self.getUuid()) - .set(VmInstanceVO_.state, VmInstanceState.Stopped) - .set(VmInstanceVO_.hostUuid, null); - - if (hostUuid != null) { - sql.set(VmInstanceVO_.lastHostUuid, hostUuid); - } - - sql.update(); - refreshVO(); + changeVmStateInDb(VmInstanceStateEvent.stopped, null, HaStartVmInstanceMsg.class.getName()); if (suspectHostUuid == null) { logger.debug(String.format("HA-start vm[%s]: skip creating pre-fence tag because suspect host is absent", self.getUuid())); diff --git a/header/src/main/java/org/zstack/header/vm/VmCanonicalEvents.java b/header/src/main/java/org/zstack/header/vm/VmCanonicalEvents.java index e6fe6a92272..d9cc1ffb952 100755 --- a/header/src/main/java/org/zstack/header/vm/VmCanonicalEvents.java +++ b/header/src/main/java/org/zstack/header/vm/VmCanonicalEvents.java @@ -155,6 +155,7 @@ public static class VmStateChangedData { private String vmUuid; private String oldState; private String newState; + private String stateChangeSource; private VmInstanceInventory inventory; private Date date = new Date(); @@ -197,6 +198,14 @@ public String getNewState() { public void setNewState(String newState) { this.newState = newState; } + + public String getStateChangeSource() { + return stateChangeSource; + } + + public void setStateChangeSource(String stateChangeSource) { + this.stateChangeSource = stateChangeSource; + } } @NeedJsonSchema