Removed useless methods

This commit is contained in:
Alex Huang 2011-01-19 14:47:27 -08:00
parent f97a5e78cb
commit ca22308d7d
9 changed files with 43 additions and 390 deletions

View File

@ -478,49 +478,50 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager {
while (retry-- != 0) { while (retry-- != 0) {
Transaction txn = Transaction.currentTxn(); Transaction txn = Transaction.currentTxn();
txn.start(); txn.start();
if (stateTransitTo(vm, Event.StartRequested, null, work.getId())) { try {
if (stateTransitTo(vm, Event.StartRequested, null, work.getId())) {
Journal journal = new Journal.LogJournal("Creating " + vm, s_logger);
work = _workDao.persist(work); Journal journal = new Journal.LogJournal("Creating " + vm, s_logger);
ReservationContextImpl context = new ReservationContextImpl(work.getId(), journal, caller, account); work = _workDao.persist(work);
ReservationContextImpl context = new ReservationContextImpl(work.getId(), journal, caller, account);
if (s_logger.isDebugEnabled()) {
s_logger.debug("Successfully transitioned to start state for " + vm + " reservation id = " + work.getId());
}
return new Ternary<T, ReservationContext, ItWorkVO>(vmGuru.findById(vmId), context, work);
}
if (s_logger.isDebugEnabled()) { if (s_logger.isDebugEnabled()) {
s_logger.debug("Successfully transitioned to start state for " + vm + " reservation id = " + work.getId()); s_logger.debug("Determining why we're unable to update the state to Starting for " + vm);
}
VMInstanceVO instance = _vmDao.lockRow(vmId, true);
if (instance == null) {
throw new ConcurrentOperationException("Unable to acquire lock on " + vm);
} }
txn.commit();
return new Ternary<T, ReservationContext, ItWorkVO>(vmGuru.findById(vmId), context, work); State state = instance.getState();
} if (state == State.Running) {
if (s_logger.isDebugEnabled()) {
if (s_logger.isDebugEnabled()) { s_logger.debug("VM is already started: " + vm);
s_logger.debug("Determining why we're unable to update the state to Starting for " + vm); }
} return null;
VMInstanceVO instance = _vmDao.lockRow(vmId, true);
if (instance == null) {
throw new ConcurrentOperationException("Unable to acquire lock on " + vm);
}
State state = instance.getState();
if (state == State.Running) {
if (s_logger.isDebugEnabled()) {
s_logger.debug("VM is already started: " + vm);
} }
txn.commit();
return null; if (state.isTransitional()) {
} if (!checkWorkItems(vm, state)) {
throw new ConcurrentOperationException("There are concurrent operations on the VM " + vm);
if (state.isTransitional()) { } else {
if (!checkWorkItems(vm, state)) { continue;
throw new ConcurrentOperationException("There are concurrent operations on the VM " + vm); }
} else {
continue;
} }
}
if (state != State.Stopped) {
if (state != State.Stopped) { s_logger.debug("VM " + vm + " is not in a state to be started: " + state);
s_logger.debug("VM " + vm + " is not in a state to be started: " + state); return null;
}
} finally {
txn.commit(); txn.commit();
return null;
} }
} }
@ -898,17 +899,7 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager {
protected boolean stateTransitTo(VMInstanceVO vm, VirtualMachine.Event e, Long hostId, String reservationId) { protected boolean stateTransitTo(VMInstanceVO vm, VirtualMachine.Event e, Long hostId, String reservationId) {
vm.setReservationId(reservationId); vm.setReservationId(reservationId);
if (vm instanceof UserVmVO) { return _stateMachine.transitTo(vm, e, hostId, _vmDao);
return _stateMachine.transitTo(vm, e, hostId, _userVmDao);
} else if (vm instanceof ConsoleProxyVO) {
return _stateMachine.transitTo(vm, e, hostId, _consoleDao);
} else if (vm instanceof SecondaryStorageVmVO) {
return _stateMachine.transitTo(vm, e, hostId, _secondaryDao);
} else if (vm instanceof DomainRouterVO) {
return _stateMachine.transitTo(vm, e, hostId, _routerDao);
} else {
return _stateMachine.transitTo(vm, e, hostId, _vmDao);
}
} }
@Override @Override

View File

@ -24,13 +24,10 @@ import java.util.List;
import com.cloud.info.ConsoleProxyLoadInfo; import com.cloud.info.ConsoleProxyLoadInfo;
import com.cloud.utils.Pair; import com.cloud.utils.Pair;
import com.cloud.utils.db.GenericDao; import com.cloud.utils.db.GenericDao;
import com.cloud.utils.fsm.StateDao;
import com.cloud.vm.ConsoleProxyVO; import com.cloud.vm.ConsoleProxyVO;
import com.cloud.vm.VMInstanceVO;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.VirtualMachine.State;
public interface ConsoleProxyDao extends GenericDao<ConsoleProxyVO, Long>, StateDao<State, VirtualMachine.Event, VMInstanceVO> { public interface ConsoleProxyDao extends GenericDao<ConsoleProxyVO, Long> {
public void update(long id, int activeSession, Date updateTime, byte[] sessionDetails); public void update(long id, int activeSession, Date updateTime, byte[] sessionDetails);
@ -49,6 +46,4 @@ public interface ConsoleProxyDao extends GenericDao<ConsoleProxyVO, Long>, State
public int getProxyStaticLoad(long proxyVmId); public int getProxyStaticLoad(long proxyVmId);
public int getProxyActiveLoad(long proxyVmId); public int getProxyActiveLoad(long proxyVmId);
public List<Long> getRunningProxyListByMsid(long msid); public List<Long> getRunningProxyListByMsid(long msid);
public boolean updateIf(ConsoleProxyVO vm, VirtualMachine.Event event, Long hostId);
} }

View File

@ -38,9 +38,6 @@ import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.Transaction; import com.cloud.utils.db.Transaction;
import com.cloud.utils.db.UpdateBuilder; import com.cloud.utils.db.UpdateBuilder;
import com.cloud.vm.ConsoleProxyVO; import com.cloud.vm.ConsoleProxyVO;
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.VirtualMachine.State;
@Local(value={ConsoleProxyDao.class}) @Local(value={ConsoleProxyDao.class})
@ -153,59 +150,6 @@ public class ConsoleProxyDaoImpl extends GenericDaoBase<ConsoleProxyVO, Long> im
assert _updateTimeAttr != null : "Couldn't get this updateTime attribute"; assert _updateTimeAttr != null : "Couldn't get this updateTime attribute";
} }
@Override
public boolean updateIf(ConsoleProxyVO vm, VirtualMachine.Event event, Long hostId) {
State oldState = vm.getState();
State newState = oldState.getNextState(event);
Long oldHostId = vm.getHostId();
long oldDate = vm.getUpdated();
if (newState == null) {
if (s_logger.isDebugEnabled()) {
s_logger.debug("There's no way to transition from old state: " + oldState.toString() + " event: " + event.toString());
}
return false;
}
SearchCriteria<ConsoleProxyVO> sc = StateChangeSearch.create();
sc.setParameters("id", vm.getId());
sc.setParameters("states", oldState);
sc.setParameters("host", vm.getHostId());
sc.setParameters("update", vm.getUpdated());
vm.incrUpdated();
UpdateBuilder ub = getUpdateBuilder(vm);
if(newState == State.Running) {
// save current running host id
ub.set(vm, "lastHostId", vm.getHostId());
}
ub.set(vm, _updateTimeAttr, new Date());
ub.set(vm, "state", newState);
ub.set(vm, "hostId", hostId);
if (newState == State.Stopped) {
vm.setActiveSession(0);
ub.set(vm, "hostId", null);
}
int result = update(vm, sc);
if (result == 0 && s_logger.isDebugEnabled()) {
ConsoleProxyVO vo = findById(vm.getId());
StringBuilder str = new StringBuilder("Unable to update ").append(vo.toString());
str.append(": DB Data={Host=").append(vo.getHostId()).append("; State=").append(vo.getState().toString()).append("; updated=").append(vo.getUpdated());
str.append("} New Data: {Host=").append(vm.getHostId()).append("; State=").append(vm.getState().toString()).append("; updated=").append(vm.getUpdated());
str.append("} Stale Data: {Host=").append(oldHostId).append("; State=").append(oldState.toString()).append("; updated=").append(oldDate).append("}");
s_logger.debug(str.toString());
}
return result > 0;
}
@Override @Override
public void update(long id, int activeSession, Date updateTime, byte[] sessionDetails) { public void update(long id, int activeSession, Date updateTime, byte[] sessionDetails) {
ConsoleProxyVO ub = createForUpdate(); ConsoleProxyVO ub = createForUpdate();
@ -399,41 +343,6 @@ public class ConsoleProxyDaoImpl extends GenericDaoBase<ConsoleProxyVO, Long> im
return l; return l;
} }
@Override
public boolean updateState(State oldState, Event event,
State newState, VMInstanceVO vm, Long hostId) {
if (newState == null) {
if (s_logger.isDebugEnabled()) {
s_logger.debug("There's no way to transition from old state: " + oldState.toString() + " event: " + event.toString());
}
return false;
}
ConsoleProxyVO consoleVM = (ConsoleProxyVO)vm;
SearchCriteria<ConsoleProxyVO> sc = StateChangeSearch.create();
sc.setParameters("id", consoleVM.getId());
sc.setParameters("states", oldState);
sc.setParameters("host", consoleVM.getHostId());
sc.setParameters("update", consoleVM.getUpdated());
vm.incrUpdated();
UpdateBuilder ub = getUpdateBuilder(consoleVM);
ub.set(consoleVM, "state", newState);
ub.set(consoleVM, "hostId", hostId);
ub.set(consoleVM, _updateTimeAttr, new Date());
int result = update(consoleVM, sc);
if (result == 0 && s_logger.isDebugEnabled()) {
ConsoleProxyVO vo = findById(consoleVM.getId());
StringBuilder str = new StringBuilder("Unable to update ").append(vo.toString());
str.append(": DB Data={Host=").append(vo.getHostId()).append("; State=").append(vo.getState().toString()).append("; updated=").append(vo.getUpdated());
str.append("} Stale Data: {Host=").append(consoleVM.getHostId()).append("; State=").append(consoleVM.getState().toString()).append("; updated=").append(consoleVM.getUpdated()).append("}");
s_logger.debug(str.toString());
}
return result > 0;
}
@Override @Override
public List<ConsoleProxyVO> listByLastHostId(long hostId) { public List<ConsoleProxyVO> listByLastHostId(long hostId) {
SearchCriteria<ConsoleProxyVO> sc = LastHostSearch.create(); SearchCriteria<ConsoleProxyVO> sc = LastHostSearch.create();

View File

@ -20,13 +20,10 @@ package com.cloud.vm.dao;
import java.util.List; import java.util.List;
import com.cloud.utils.db.GenericDao; import com.cloud.utils.db.GenericDao;
import com.cloud.utils.fsm.StateDao;
import com.cloud.vm.SecondaryStorageVmVO; import com.cloud.vm.SecondaryStorageVmVO;
import com.cloud.vm.VMInstanceVO;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.VirtualMachine.State;
public interface SecondaryStorageVmDao extends GenericDao<SecondaryStorageVmVO, Long>, StateDao<State, VirtualMachine.Event, VMInstanceVO> { public interface SecondaryStorageVmDao extends GenericDao<SecondaryStorageVmVO, Long> {
public List<SecondaryStorageVmVO> getSecStorageVmListInStates(long dataCenterId, State... states); public List<SecondaryStorageVmVO> getSecStorageVmListInStates(long dataCenterId, State... states);
public List<SecondaryStorageVmVO> getSecStorageVmListInStates(State... states); public List<SecondaryStorageVmVO> getSecStorageVmListInStates(State... states);
@ -40,6 +37,4 @@ public interface SecondaryStorageVmDao extends GenericDao<SecondaryStorageVmVO,
public List<Long> getRunningSecStorageVmListByMsid(long msid); public List<Long> getRunningSecStorageVmListByMsid(long msid);
public boolean updateIf(SecondaryStorageVmVO vm, VirtualMachine.Event event, Long hostId);
} }

View File

@ -21,7 +21,6 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import javax.ejb.Local; import javax.ejb.Local;
@ -35,9 +34,6 @@ import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.Transaction; import com.cloud.utils.db.Transaction;
import com.cloud.utils.db.UpdateBuilder; import com.cloud.utils.db.UpdateBuilder;
import com.cloud.vm.SecondaryStorageVmVO; import com.cloud.vm.SecondaryStorageVmVO;
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.VirtualMachine.State;
@Local(value={SecondaryStorageVmDao.class}) @Local(value={SecondaryStorageVmDao.class})
@ -93,56 +89,6 @@ public class SecondaryStorageVmDaoImpl extends GenericDaoBase<SecondaryStorageVm
assert _updateTimeAttr != null : "Couldn't get this updateTime attribute"; assert _updateTimeAttr != null : "Couldn't get this updateTime attribute";
} }
@Override
public boolean updateIf(SecondaryStorageVmVO vm, VirtualMachine.Event event, Long hostId) {
State oldState = vm.getState();
State newState = oldState.getNextState(event);
Long oldHostId = vm.getHostId();
long oldDate = vm.getUpdated();
if (newState == null) {
if (s_logger.isDebugEnabled()) {
s_logger.debug("There's no way to transition from old state: " + oldState.toString() + " event: " + event.toString());
}
return false;
}
SearchCriteria<SecondaryStorageVmVO> sc = StateChangeSearch.create();
sc.setParameters("id", vm.getId());
sc.setParameters("states", oldState);
sc.setParameters("host", vm.getHostId());
sc.setParameters("update", vm.getUpdated());
vm.incrUpdated();
UpdateBuilder ub = getUpdateBuilder(vm);
if(newState == State.Running) {
// save current running host id
ub.set(vm, "lastHostId", vm.getHostId());
}
ub.set(vm, _updateTimeAttr, new Date());
ub.set(vm, "state", newState);
ub.set(vm, "hostId", hostId);
if (newState == State.Stopped) {
ub.set(vm, "hostId", null);
}
int result = update(vm, sc);
if (result == 0 && s_logger.isDebugEnabled()) {
SecondaryStorageVmVO vo = findById(vm.getId());
StringBuilder str = new StringBuilder("Unable to update ").append(vo.toString());
str.append(": DB Data={Host=").append(vo.getHostId()).append("; State=").append(vo.getState().toString()).append("; updated=").append(vo.getUpdated());
str.append("} New Data: {Host=").append(vm.getHostId()).append("; State=").append(vm.getState().toString()).append("; updated=").append(vm.getUpdated());
str.append("} Stale Data: {Host=").append(oldHostId).append("; State=").append(oldState.toString()).append("; updated=").append(oldDate).append("}");
s_logger.debug(str.toString());
}
return result > 0;
}
@Override @Override
public boolean remove(Long id) { public boolean remove(Long id) {
Transaction txn = Transaction.currentTxn(); Transaction txn = Transaction.currentTxn();
@ -219,41 +165,6 @@ public class SecondaryStorageVmDaoImpl extends GenericDaoBase<SecondaryStorageVm
return listBy(sc); return listBy(sc);
} }
@Override
public boolean updateState(State oldState, Event event,
State newState, VMInstanceVO vm, Long hostId) {
if (newState == null) {
if (s_logger.isDebugEnabled()) {
s_logger.debug("There's no way to transition from old state: " + oldState.toString() + " event: " + event.toString());
}
return false;
}
SecondaryStorageVmVO secondaryVM = (SecondaryStorageVmVO)vm;
SearchCriteria<SecondaryStorageVmVO> sc = StateChangeSearch.create();
sc.setParameters("id", secondaryVM.getId());
sc.setParameters("states", oldState);
sc.setParameters("host", secondaryVM.getHostId());
sc.setParameters("update", secondaryVM.getUpdated());
vm.incrUpdated();
UpdateBuilder ub = getUpdateBuilder(secondaryVM);
ub.set(secondaryVM, "state", newState);
ub.set(secondaryVM, "hostId", hostId);
ub.set(secondaryVM, _updateTimeAttr, new Date());
int result = update(secondaryVM, sc);
if (result == 0 && s_logger.isDebugEnabled()) {
SecondaryStorageVmVO vo = findById(secondaryVM.getId());
StringBuilder str = new StringBuilder("Unable to update ").append(vo.toString());
str.append(": DB Data={Host=").append(vo.getHostId()).append("; State=").append(vo.getState().toString()).append("; updated=").append(vo.getUpdated());
str.append("} Stale Data: {Host=").append(secondaryVM.getHostId()).append("; State=").append(secondaryVM.getState().toString()).append("; updated=").append(secondaryVM.getUpdated()).append("}");
s_logger.debug(str.toString());
}
return result > 0;
}
@Override @Override
public List<SecondaryStorageVmVO> listByLastHostId(long hostId) { public List<SecondaryStorageVmVO> listByLastHostId(long hostId) {
SearchCriteria<SecondaryStorageVmVO> sc = LastHostSearch.create(); SearchCriteria<SecondaryStorageVmVO> sc = LastHostSearch.create();

View File

@ -22,13 +22,10 @@ import java.util.List;
import com.cloud.uservm.UserVm; import com.cloud.uservm.UserVm;
import com.cloud.utils.db.GenericDao; import com.cloud.utils.db.GenericDao;
import com.cloud.utils.fsm.StateDao;
import com.cloud.vm.UserVmVO; import com.cloud.vm.UserVmVO;
import com.cloud.vm.VMInstanceVO;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.VirtualMachine.State;
public interface UserVmDao extends GenericDao<UserVmVO, Long>, StateDao<State, VirtualMachine.Event, VMInstanceVO> { public interface UserVmDao extends GenericDao<UserVmVO, Long> {
List<UserVmVO> listByAccountId(long id); List<UserVmVO> listByAccountId(long id);
List<UserVmVO> listByAccountAndPod(long accountId, long podId); List<UserVmVO> listByAccountAndPod(long accountId, long podId);
@ -47,21 +44,6 @@ public interface UserVmDao extends GenericDao<UserVmVO, Long>, StateDao<State, V
UserVmVO findByName(String name); UserVmVO findByName(String name);
/**
* This method is of supreme importance in the management of VMs. It updates a uservm if and only if
* the following condition are true. If the update is complete, all changes to the uservm entity
* are persisted. The state is also changed to the new state.
*
* 1. There's a transition from the current state via the event to a new state.
* 2. The db has not changed on the current state, update time, and host id sent.
*
* @param vm vm object to persist.
* @param event
* @param hostId
* @return true if updated, false if not.
*/
boolean updateIf(UserVmVO vm, VirtualMachine.Event event, Long hostId);
/** /**
* Updates display name and group for vm; enables/disables ha * Updates display name and group for vm; enables/disables ha
* @param id vm id. * @param id vm id.

View File

@ -32,17 +32,13 @@ import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.JoinBuilder; import com.cloud.utils.db.JoinBuilder;
import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.UpdateBuilder;
import com.cloud.vm.NicVO; import com.cloud.vm.NicVO;
import com.cloud.vm.UserVmVO; 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.VirtualMachine.State;
@Local(value={UserVmDao.class}) @Local(value={UserVmDao.class})
public class UserVmDaoImpl extends GenericDaoBase<UserVmVO, Long> implements UserVmDao { public class UserVmDaoImpl extends GenericDaoBase<UserVmVO, Long> implements UserVmDao {
public static final Logger s_logger = Logger.getLogger(UserVmDaoImpl.class.getName()); public static final Logger s_logger = Logger.getLogger(UserVmDaoImpl.class);
protected final SearchBuilder<UserVmVO> RouterStateSearch; protected final SearchBuilder<UserVmVO> RouterStateSearch;
protected final SearchBuilder<UserVmVO> RouterIdSearch; protected final SearchBuilder<UserVmVO> RouterIdSearch;
@ -200,57 +196,6 @@ public class UserVmDaoImpl extends GenericDaoBase<UserVmVO, Long> implements Use
return listIncludingRemovedBy(sc); return listIncludingRemovedBy(sc);
} }
@Override
public boolean updateIf(UserVmVO vm, VirtualMachine.Event event, Long hostId) {
if (s_logger.isDebugEnabled()) {
s_logger.debug("UpdateIf called " + vm.toString() + " event " + event.toString() + " host " + hostId);
}
State oldState = vm.getState();
State newState = oldState.getNextState(event);
Long oldHostId = vm.getHostId();
long oldDate = vm.getUpdated();
if (newState == null) {
if (s_logger.isDebugEnabled()) {
s_logger.debug("There's no way to transition from old state: " + oldState.toString() + " event: " + event.toString());
}
return false;
}
SearchCriteria<UserVmVO> sc = StateChangeSearch.create();
sc.setParameters("id", vm.getId());
sc.setParameters("states", oldState);
sc.setParameters("host", vm.getHostId());
sc.setParameters("update", vm.getUpdated());
vm.incrUpdated();
UpdateBuilder ub = getUpdateBuilder(vm);
if(newState == State.Running) {
// save current running host id to last_host_id field
ub.set(vm, "lastHostId", vm.getHostId());
} else if(newState == State.Expunging) {
ub.set(vm, "lastHostId", null);
}
ub.set(vm, "state", newState);
ub.set(vm, "hostId", hostId);
ub.set(vm, _updateTimeAttr, new Date());
int result = update(vm, sc);
if (result == 0 && s_logger.isDebugEnabled()) {
UserVmVO vo = findById(vm.getId());
StringBuilder str = new StringBuilder("Unable to update ").append(vo.toString());
str.append(": DB Data={Host=").append(vo.getHostId()).append("; State=").append(vo.getState().toString()).append("; updated=").append(vo.getUpdated());
str.append("} New Data: {Host=").append(vm.getHostId()).append("; State=").append(vm.getState().toString()).append("; updated=").append(vm.getUpdated());
str.append("} Stale Data: {Host=").append(oldHostId).append("; State=").append(oldState.toString()).append("; updated=").append(oldDate).append("}");
s_logger.debug(str.toString());
}
return result > 0;
}
@Override @Override
public List<UserVmVO> findDestroyedVms(Date date) { public List<UserVmVO> findDestroyedVms(Date date) {
SearchCriteria<UserVmVO> sc = DestroySearch.create(); SearchCriteria<UserVmVO> sc = DestroySearch.create();
@ -361,41 +306,6 @@ public class UserVmDaoImpl extends GenericDaoBase<UserVmVO, Long> implements Use
return findOneBy(sc); return findOneBy(sc);
} }
@Override
public boolean updateState(State oldState, Event event,
State newState, VMInstanceVO vm, Long hostId) {
if (newState == null) {
if (s_logger.isDebugEnabled()) {
s_logger.debug("There's no way to transition from old state: " + oldState.toString() + " event: " + event.toString());
}
return false;
}
UserVmVO userVM = (UserVmVO)vm;
SearchCriteria<UserVmVO> sc = StateChangeSearch.create();
sc.setParameters("id", userVM.getId());
sc.setParameters("states", oldState);
sc.setParameters("host", userVM.getHostId());
sc.setParameters("update", userVM.getUpdated());
vm.incrUpdated();
UpdateBuilder ub = getUpdateBuilder(userVM);
ub.set(userVM, "state", newState);
ub.set(userVM, "hostId", hostId);
ub.set(userVM, _updateTimeAttr, new Date());
int result = update(userVM, sc);
if (result == 0 && s_logger.isDebugEnabled()) {
UserVmVO vo = findById(userVM.getId());
StringBuilder str = new StringBuilder("Unable to update ").append(vo.toString());
str.append(": DB Data={Host=").append(vo.getHostId()).append("; State=").append(vo.getState().toString()).append("; updated=").append(vo.getUpdated());
str.append("} Stale Data: {Host=").append(userVM.getHostId()).append("; State=").append(userVM.getState().toString()).append("; updated=").append(userVM.getUpdated()).append("}");
s_logger.debug(str.toString());
}
return result > 0;
}
@Override @Override
public List<UserVmVO> listByLastHostId(Long hostId) { public List<UserVmVO> listByLastHostId(Long hostId) {
SearchCriteria<UserVmVO> sc = LastHostSearch.create(); SearchCriteria<UserVmVO> sc = LastHostSearch.create();

View File

@ -53,8 +53,6 @@ public interface VMInstanceDao extends GenericDao<VMInstanceVO, Long>, StateDao<
*/ */
public List<VMInstanceVO> listNonExpungedByZoneAndTemplate(long zoneId, long templateId); public List<VMInstanceVO> listNonExpungedByZoneAndTemplate(long zoneId, long templateId);
boolean updateIf(VMInstanceVO vm, VirtualMachine.Event event, Long hostId, String reservationId);
/** /**
* Find vm instance with names like. * Find vm instance with names like.
* *

View File

@ -153,44 +153,6 @@ public class VMInstanceDaoImpl extends GenericDaoBase<VMInstanceVO, Long> implem
return listBy(sc); return listBy(sc);
} }
@Override
public boolean updateIf(VMInstanceVO vm, VirtualMachine.Event event, Long hostId, String reservationId) {
State oldState = vm.getState();
State newState = oldState.getNextState(event);
if (newState == null) {
if (s_logger.isDebugEnabled()) {
s_logger.debug("There's no way to transition from old state: " + oldState.toString() + " event: " + event.toString());
}
return false;
}
SearchCriteria<VMInstanceVO> sc = StateChangeSearch.create();
sc.setParameters("id", vm.getId());
sc.setParameters("states", oldState);
sc.setParameters("host", vm.getHostId());
sc.setParameters("update", vm.getUpdated());
vm.incrUpdated();
vm.setReservationId(reservationId);
UpdateBuilder ub = getUpdateBuilder(vm);
ub.set(vm, "state", newState);
ub.set(vm, "hostId", hostId);
ub.set(vm, _updateTimeAttr, new Date());
int result = update(vm, sc);
if (result == 0 && s_logger.isDebugEnabled()) {
VMInstanceVO vo = findById(vm.getId());
StringBuilder str = new StringBuilder("Unable to update ").append(vo.toString());
str.append(": DB Data={Host=").append(vo.getHostId()).append("; State=").append(vo.getState().toString()).append("; updated=").append(vo.getUpdated());
str.append("} Stale Data: {Host=").append(vm.getHostId()).append("; State=").append(vm.getState().toString()).append("; updated=").append(vm.getUpdated()).append("}");
s_logger.debug(str.toString());
}
return result > 0;
}
@Override @Override
public List<VMInstanceVO> listByHostId(long hostid) { public List<VMInstanceVO> listByHostId(long hostid) {
SearchCriteria<VMInstanceVO> sc = HostSearch.create(); SearchCriteria<VMInstanceVO> sc = HostSearch.create();