mirror of https://github.com/apache/cloudstack.git
ovs -- use VmStateListener to track vm state change
This commit is contained in:
parent
41cbd0edac
commit
65e326c751
|
|
@ -44,10 +44,12 @@ import com.cloud.utils.component.Inject;
|
|||
import com.cloud.utils.concurrency.NamedThreadFactory;
|
||||
import com.cloud.utils.db.DB;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
import com.cloud.utils.fsm.StateListener;
|
||||
import com.cloud.vm.DomainRouterVO;
|
||||
import com.cloud.vm.UserVmVO;
|
||||
import com.cloud.vm.VMInstanceVO;
|
||||
import com.cloud.vm.VirtualMachine;
|
||||
import com.cloud.vm.VirtualMachine.Event;
|
||||
import com.cloud.vm.VirtualMachine.State;
|
||||
import com.cloud.vm.VirtualMachineProfile;
|
||||
import com.cloud.vm.dao.DomainRouterDao;
|
||||
|
|
@ -78,10 +80,45 @@ public class OvsNetworkManagerImpl implements OvsNetworkManager {
|
|||
ScheduledExecutorService _executorPool;
|
||||
ScheduledExecutorService _cleanupExecutor;
|
||||
OvsListener _ovsListener;
|
||||
VmStateListener _stateListener;
|
||||
|
||||
private long _serverId;
|
||||
private final long _timeBetweenCleanups = 30; //seconds
|
||||
|
||||
public class VmStateListener implements StateListener<State, VirtualMachine.Event, VirtualMachine> {
|
||||
OvsNetworkManager _mgr;
|
||||
public VmStateListener(OvsNetworkManager mgr) {
|
||||
_mgr = mgr;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean postStateTransitionEvent(State oldState, Event event, State newState, VirtualMachine vm, boolean status) {
|
||||
if (!_isEnabled || !status || (vm.getType() != VirtualMachine.Type.User && vm.getType() != VirtualMachine.Type.DomainRouter)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (VirtualMachine.State.isVmStarted(oldState, event, newState)) {
|
||||
_mgr.handleVmStateTransition((VMInstanceVO)vm, State.Running);
|
||||
} else if (VirtualMachine.State.isVmMigrated(oldState, event, newState)) {
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean preStateTransitionEvent(State oldState, Event event, State newState, VirtualMachine vm, boolean status, Long id) {
|
||||
if (!_isEnabled || !status || (vm.getType() != VirtualMachine.Type.User && vm.getType() != VirtualMachine.Type.DomainRouter)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (VirtualMachine.State.isVmStopped(oldState, event, newState)) {
|
||||
_mgr.handleVmStateTransition((VMInstanceVO)vm, State.Stopped);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class WorkerThread implements Runnable {
|
||||
@Override
|
||||
public void run() {
|
||||
|
|
@ -117,6 +154,8 @@ public class OvsNetworkManagerImpl implements OvsNetworkManager {
|
|||
_cleanupExecutor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("OVS-Cleanup"));
|
||||
_ovsListener = new OvsListener(this, _workDao, _tunnelDao, _vlanMappingDao, _hostDao);
|
||||
_agentMgr.registerForHostEvents(_ovsListener, true, true, true);
|
||||
_stateListener = new VmStateListener(this);
|
||||
VirtualMachine.State.getStateMachine().registerListener(_stateListener);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -1213,9 +1213,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
|
|||
s_logger.warn("Unable to ssh to the VM: " + answer.getDetails());
|
||||
return false;
|
||||
}
|
||||
|
||||
DomainRouterVO router = profile.getVirtualMachine();
|
||||
_ovsNetworkMgr.handleVmStateTransition(router, State.Running);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -1226,7 +1224,6 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
|
|||
}
|
||||
|
||||
DomainRouterVO router = profile.getVirtualMachine();
|
||||
_ovsNetworkMgr.handleVmStateTransition(router, State.Stopped);
|
||||
_ovsTunnelMgr.CheckAndDestroyTunnel(router);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2248,7 +2248,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
|
|||
@Override
|
||||
public boolean finalizeStart(VirtualMachineProfile<UserVmVO> profile, long hostId, Commands cmds, ReservationContext context) {
|
||||
UserVmVO vm = profile.getVirtualMachine();
|
||||
_ovsNetworkMgr.handleVmStateTransition(vm, State.Running);
|
||||
UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_VM_START, vm.getAccountId(), vm.getDataCenterId(), vm.getId(), vm.getName(), vm.getServiceOfferingId(), vm.getTemplateId(), null);
|
||||
_usageEventDao.persist(usageEvent);
|
||||
|
||||
|
|
@ -2309,7 +2308,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
|
|||
@Override
|
||||
public void finalizeStop(VirtualMachineProfile<UserVmVO> profile, StopAnswer answer) {
|
||||
UserVmVO vm = profile.getVirtualMachine();
|
||||
_ovsNetworkMgr.handleVmStateTransition(vm, State.Stopped);
|
||||
_ovsTunnelMgr.CheckAndDestroyTunnel(vm);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue