@Transactional(readOnly = true) protected String getHostIp(VmInstanceInventory vm) { String sql = "select h.managementIp from HostVO h, VmInstanceVO vm where h.uuid = vm.hostUuid and vm.uuid = :uuid"; TypedQuery<String> q = dbf.getEntityManager().createQuery(sql, String.class); q.setParameter("uuid", vm.getUuid()); List<String> ret = q.getResultList(); return ret.isEmpty() ? null : ret.get(0); }
@Override public String preStartVm(VmInstanceInventory inv) { try{ checkVmAllVolumePrimaryStorageState(inv.getUuid()); return null; }catch (Exception e){ return e.getMessage(); } }
@Transactional private void detachDataVolume(VmInstanceInventory inv) { dbf.entityForTranscationCallback(Operation.UPDATE, VolumeVO.class); String sql = "update VolumeVO vol set vol.vmInstanceUuid = NULL, vol.deviceId = NULL where vol.vmInstanceUuid = :vmUuid and vol.type = :volType"; Query q = dbf.getEntityManager().createQuery(sql); q.setParameter("vmUuid", inv.getUuid()); q.setParameter("volType", VolumeType.Data); q.executeUpdate(); }
@Override public void fail(ErrorCode errorCode) { N.New(VmInstanceVO.class, inv.getUuid()).warn_("after migration, failed to apply EIPs[uuids:%s] to the vm[uuid:%s, name:%s] on the destination host[uuid:%s], %s", eips.stream().map(e -> e.vip).collect(Collectors.toList()), inv.getUuid(), inv.getName(), inv.getHostUuid(), errorCode); } });
private VmInstanceDeletionPolicy getDeletionPolicy(VmInstanceSpec spec, Map data) { if (data.containsKey(VmInstanceConstant.Params.DeletionPolicy)) { return (VmInstanceDeletionPolicy) data.get(VmInstanceConstant.Params.DeletionPolicy); } return deletionPolicyMgr.getDeletionPolicy(spec.getVmInventory().getUuid()); } }
@Transactional(readOnly = true) private List<VolumeInventory> getVolumeOnLocalStorage(VmInstanceSpec spec) { String sql = "select v from VolumeVO v, PrimaryStorageVO ps where v.primaryStorageUuid = ps.uuid" + " and ps.type = :type and v.vmInstanceUuid = :vmUuid"; TypedQuery<VolumeVO> q = dbf.getEntityManager().createQuery(sql, VolumeVO.class); q.setParameter("type", LocalStorageConstants.LOCAL_STORAGE_TYPE); q.setParameter("vmUuid", spec.getVmInventory().getUuid()); return VolumeInventory.valueOf(q.getResultList()); } }
@Override public void fail(ErrorCode errorCode) { //TODO add GC logger.warn(String.format("unable to release user data for vm[uuid:%s], %s", servedVm.getVmInventory().getUuid(), errorCode)); completion.done(); } });
@Override public void run(FlowTrigger trigger, Map data) { VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); tracker.untrack(spec.getVmInventory().getUuid()); trigger.next(); } }
@Override public void fail(ErrorCode errorCode) { logger.debug(String.format("vm[uuid:%s, name:%s] migrated to host[uuid:%s], failed to cleanup its old rules on host[uuid:%s] if needed", inv.getUuid(), inv.getName(), inv.getHostUuid(), srcHostUuid)); createFailureHostTask(inv.getLastHostUuid()); } });
@Override public void fail(ErrorCode errorCode) { logger.warn(String.format("failed to release userdata on the source host[uuid:%s]" + " for the migrated VM[uuid: %s, name:%s], %s. GC will take care it", srcHostUuid, inv.getUuid(), inv.getName(), errorCode)); UserdataReleseGC gc = new UserdataReleseGC(); gc.struct = struct; gc.submit(UserdataReleseGC.INTERVAL, TimeUnit.SECONDS); } });
@Override public void rollback(FlowRollback trigger, Map data) { if (data.containsKey(VmSetDefaultL3NetworkOnAttachingFlow.class)) { VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); VmInstanceVO vm = dbf.findByUuid(spec.getVmInventory().getUuid(), VmInstanceVO.class); vm.setDefaultL3NetworkUuid(null); dbf.update(vm); } trigger.rollback(); } }
@Override public void handle(Map data) { logger.debug(String.format("successfully released network services for vm[uuid:%s, name:%s]", spec.getVmInventory().getUuid(), spec.getVmInventory().getName())); completion.done(); } }).start();
private void handle(MigrateVmOnHypervisorMsg msg) { MigrateVmOnHypervisorReply reply = new MigrateVmOnHypervisorReply(); if (!config.migrateSuccess) { reply.setError(operr("on purpose")); } else { logger.debug(String.format("Successfully migrate vm[uuid:%s] on simulator host[uuid:%s] to host[uuid:%s]", msg.getVmInventory().getUuid(), self.getUuid(), msg.getDestHostInventory().getUuid())); config.removeVm(msg.getSrcHostUuid(), msg.getVmInventory().getUuid()); config.putVm(msg.getDestHostInventory().getUuid(), msg.getVmInventory().getUuid(), VmInstanceState.Running); } bus.reply(msg, reply); }
@Override public void notifyVmInstanceStateChange(VmInstanceInventory inv, VmInstanceState previousState, VmInstanceState currentState) { if (previousState == VmInstanceState.Unknown && currentState == VmInstanceState.Running) { RefreshSecurityGroupRulesOnVmMsg msg = new RefreshSecurityGroupRulesOnVmMsg(); msg.setVmInstanceUuid(inv.getUuid()); msg.setServiceId(bus.makeLocalServiceId(SecurityGroupConstant.SERVICE_ID)); bus.send(msg); } }
private void addons(final VmInstanceSpec spec, StartVmCmd cmd) { KVMAddons.Channel chan = new KVMAddons.Channel(); chan.setSocketPath(makeChannelSocketPath(spec.getVmInventory().getUuid())); chan.setTargetName("org.qemu.guest_agent.0"); cmd.getAddons().put(KVMAddons.Channel.NAME, chan); logger.debug(String.format("make kvm channel device[path:%s, target:%s]", chan.getSocketPath(), chan.getTargetName())); }
private void handle(AttachVolumeToVmOnHypervisorMsg msg) { logger.debug(String.format("Successfully attached volume[uuid:%s] to vm[uuid:%s] on simulator host[uuid:%s]", msg.getInventory().getUuid(), msg.getVmInventory().getUuid(), self.getUuid())); AttachVolumeToVmOnHypervisorReply reply = new AttachVolumeToVmOnHypervisorReply(); bus.reply(msg, reply); }
@Override public void success() { dbf.remove(vo); logger.debug(String.format("deleted a console proxy[vmUuid:%s, host IP: %s, host port: %s, proxy IP: %s, proxy port: %s", vm.getUuid(), vo.getTargetHostname(), vo.getTargetPort(), vo.getProxyHostname(), vo.getProxyPort())); completion.success(); }
@Override public void run(FlowTrigger chain, Map ctx) { final VolumeInventory volume = (VolumeInventory) ctx.get(VmInstanceConstant.Params.AttachingVolumeInventory.toString()); final VmInstanceSpec spec = (VmInstanceSpec) ctx.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); VolumeVO dvol = dbf.findByUuid(volume.getUuid(), VolumeVO.class); dvol.setDeviceId(new NextVolumeDeviceIdGetter().getNextVolumeDeviceId(spec.getVmInventory().getUuid())); dvol = dbf.updateAndRefresh(dvol); ctx.put(VmInstanceConstant.Params.AttachingVolumeInventory.toString(), VolumeInventory.valueOf(dvol)); chain.next(); }
private void handle(RebootVmOnHypervisorMsg msg) { logger.debug(String.format("Successfully rebooted vm on simulator host[uuid:%s], %s", self.getUuid(), JSONObjectUtil.toJsonString(msg.getVmInventory()))); RebootVmOnHypervisorReply reply = new RebootVmOnHypervisorReply(); setVmState(msg.getVmInventory().getUuid(), VmInstanceState.Running); bus.reply(msg, reply); }
private void reserveCapacity(final HostInventory host) { new HostAllocatorChain().reserveCapacity(host.getUuid(), allocationSpec.getCpuCapacity(), allocationSpec.getMemoryCapacity()); logger.debug(String.format("[Host Allocation]: successfully reserved cpu[%s], memory[%s bytes] on host[uuid:%s] for vm[uuid:%s]", allocationSpec.getCpuCapacity(), allocationSpec.getMemoryCapacity(), host.getUuid(), allocationSpec.getVmInstance().getUuid())); }