s_logger.info("Handling unfinished work item: " + work); try { final VMInstanceVO vm = _vmDao.findById(work.getInstanceId()); if (vm != null) { if (work.getType() == State.Starting) { _haMgr.scheduleRestart(vm, true); work.setManagementServerId(_nodeId); work.setStep(Step.Done); _workDao.update(work.getId(), work); } else if (work.getType() == State.Stopping) { _haMgr.scheduleStop(vm, vm.getHostId(), WorkType.CheckStop); work.setManagementServerId(_nodeId); work.setStep(Step.Done); _workDao.update(work.getId(), work); } else if (work.getType() == State.Migrating) { _haMgr.scheduleMigration(vm); work.setStep(Step.Done); _workDao.update(work.getId(), work);
protected ItWorkDaoImpl() { super(); AllFieldsSearch = createSearchBuilder(); AllFieldsSearch.and("instance", AllFieldsSearch.entity().getInstanceId(), Op.EQ); AllFieldsSearch.and("op", AllFieldsSearch.entity().getType(), Op.EQ); AllFieldsSearch.and("step", AllFieldsSearch.entity().getStep(), Op.EQ); AllFieldsSearch.done(); CleanupSearch = createSearchBuilder(); CleanupSearch.and("step", CleanupSearch.entity().getType(), Op.IN); CleanupSearch.and("time", CleanupSearch.entity().getUpdatedAt(), Op.LT); CleanupSearch.done(); OutstandingWorkSearch = createSearchBuilder(); OutstandingWorkSearch.and("instance", OutstandingWorkSearch.entity().getInstanceId(), Op.EQ); OutstandingWorkSearch.and("op", OutstandingWorkSearch.entity().getType(), Op.EQ); OutstandingWorkSearch.and("step", OutstandingWorkSearch.entity().getStep(), Op.NEQ); OutstandingWorkSearch.done(); WorkInProgressSearch = createSearchBuilder(); WorkInProgressSearch.and("server", WorkInProgressSearch.entity().getManagementServerId(), Op.EQ); WorkInProgressSearch.and("step", WorkInProgressSearch.entity().getStep(), Op.NIN); WorkInProgressSearch.done(); }
if (vo.getStep() == Step.Done) { if (s_logger.isDebugEnabled()) { s_logger.debug("Work for " + vm + " is " + vo.getStep()); if (vo.getSecondsTaskIsInactive() > VmOpCancelInterval.value()) { s_logger.warn("The task item for vm " + vm + " has been inactive for " + vo.getSecondsTaskIsInactive()); return false;
final PrepareForMigrationCommand pfmc = new PrepareForMigrationCommand(to); ItWorkVO work = new ItWorkVO(UUID.randomUUID().toString(), _nodeId, State.Migrating, vm.getType(), vm.getId()); work.setStep(Step.Prepare); work.setResourceType(ItWorkVO.ResourceType.Host); work.setResourceId(dstHostId); work = _workDao.persist(work); } finally { if (pfma == null) { work.setStep(Step.Done); _workDao.update(work.getId(), work); work.setStep(Step.Done); _workDao.update(work.getId(), work);
work = _workDao.findById(work.getId()); if (work == null || work.getStep() != Step.Prepare) { throw new ConcurrentOperationException("Work steps have been changed: " + work); } finally { if (startedVm == null && canRetry) { final Step prevStep = work.getStep(); _workDao.updateStep(work, Step.Release);
protected <T extends VMInstanceVO> boolean changeState(final T vm, final Event event, final Long hostId, final ItWorkVO work, final Step step) throws NoTransitionException { // FIXME: We should do this better. Step previousStep = null; if (work != null) { previousStep = work.getStep(); _workDao.updateStep(work, step); } boolean result = false; try { result = stateTransitTo(vm, event, hostId); return result; } finally { if (!result && work != null) { _workDao.updateStep(work, previousStep); } } }
@Override public Ternary<VMInstanceVO, ReservationContext, ItWorkVO> doInTransaction(final TransactionStatus status) throws NoTransitionException { final Journal journal = new Journal.LogJournal("Creating " + vm, s_logger); final ItWorkVO work = _workDao.persist(workFinal); final ReservationContextImpl context = new ReservationContextImpl(work.getId(), journal, caller, account); if (stateTransitTo(vm, Event.StartRequested, null, work.getId())) { if (s_logger.isDebugEnabled()) { s_logger.debug("Successfully transitioned to start state for " + vm + " reservation id = " + work.getId()); } return new Ternary<VMInstanceVO, ReservationContext, ItWorkVO>(vm, context, work); } return new Ternary<VMInstanceVO, ReservationContext, ItWorkVO>(null, null, work); } });
final long vmId = vm.getId(); ItWorkVO work = new ItWorkVO(UUID.randomUUID().toString(), _nodeId, State.Starting, vm.getType(), vm.getId()); int retry = VmOpLockStateRetry.value(); while (retry-- != 0) {
final PrepareForMigrationCommand pfmc = new PrepareForMigrationCommand(to); ItWorkVO work = new ItWorkVO(UUID.randomUUID().toString(), _nodeId, State.Migrating, vm.getType(), vm.getId()); work.setStep(Step.Prepare); work.setResourceType(ItWorkVO.ResourceType.Host); work.setResourceId(dstHostId); work = _workDao.persist(work); if (pfma == null) { _networkMgr.rollbackNicForMigration(vmSrc, profile); work.setStep(Step.Done); _workDao.update(work.getId(), work); work.setStep(Step.Done); _workDao.update(work.getId(), work);
if (work != null) { if (s_logger.isDebugEnabled()) { s_logger.debug("Found an outstanding work item for this vm " + vm + " with state:" + vm.getState() + ", work id:" + work.getId()); s_logger.debug("Updating work item to Done, id:" + work.getId()); work.setStep(Step.Done); _workDao.update(work.getId(), work); try { if (s_logger.isDebugEnabled() && work != null) { s_logger.debug("Updating work item to Done, id:" + work.getId()); if (work != null) { if (s_logger.isDebugEnabled()) { s_logger.debug("Updating the outstanding work item to Done, id:" + work.getId()); work.setStep(Step.Done); _workDao.update(work.getId(), work);
if (state == State.Starting) { if (work != null) { final Step step = work.getStep(); if (step == Step.Starting && !cleanUpEvenIfUnableToStop) { s_logger.warn("Unable to cleanup vm " + vm + "; work state is incorrect: " + step);
final ItWorkVO work = new ItWorkVO(UUID.randomUUID().toString(), _nodeId, State.Running, vm.getType(), vm.getId()); work.setStep(Step.Prepare); work.setResourceType(ItWorkVO.ResourceType.Host); work.setResourceId(vm.getHostId()); _workDao.persist(work); boolean success = false;
final VirtualMachineTO to = hvGuru.implement(profile); ItWorkVO work = new ItWorkVO(UUID.randomUUID().toString(), _nodeId, State.Migrating, vm.getType(), vm.getId()); work.setStep(Step.Prepare); work.setResourceType(ItWorkVO.ResourceType.Host); work.setResourceId(destHostId); work = _workDao.persist(work); work.setStep(Step.Done); _workDao.update(work.getId(), work);