From df17ce564881256bfa0311ae652cbae708489cb9 Mon Sep 17 00:00:00 2001 From: prachi Date: Thu, 15 Sep 2011 14:46:49 -0700 Subject: [PATCH] Bug 11457 - NullPointerException while synching VM state from Starting -> Running between management server and agent MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit reviewed-by: Alex/Kelven Changes: 1. UserVmManagerImpl :: finalizeStart() Added null check for the cmds.getAnswers() object. Return ‘true’ if null. 2. VirtualMachineManagerImpl :: advanceStart() Move the line to set PodId to the vm being started above the state transition where hostId gets set, so that podId is not null in case management server goes down when vm starts on the agent. On restart, podId is not updated during fullsync. So this will prevent podId remaining null. vm.setPodId(dest.getPod().getId()); --- server/src/com/cloud/vm/UserVmManagerImpl.java | 8 ++++++++ server/src/com/cloud/vm/VirtualMachineManagerImpl.java | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index e026191116a..c9df2f1f31a 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -2751,6 +2751,14 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager @Override public boolean finalizeStart(VirtualMachineProfile profile, long hostId, Commands cmds, ReservationContext context) { UserVmVO vm = profile.getVirtualMachine(); + + Answer[] answersToCmds = cmds.getAnswers(); + if(answersToCmds == null){ + if(s_logger.isDebugEnabled()){ + s_logger.debug("Returning from finalizeStart() since there are no answers to read"); + } + return true; + } Answer startAnswer = cmds.getAnswer(StartAnswer.class); String returnedIp = null; String originalIp = null; diff --git a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java index a50739ff2e8..84bb3b5f516 100755 --- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java @@ -692,6 +692,7 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Listene } long destHostId = dest.getHost().getId(); + vm.setPodId(dest.getPod().getId()); try { if (!changeState(vm, Event.OperationRetry, destHostId, work, Step.Prepare)) { @@ -715,7 +716,6 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Listene cmds.addCommand(new StartCommand(vmTO)); vmGuru.finalizeDeployment(cmds, vmProfile, dest, ctx); - vm.setPodId(dest.getPod().getId()); work = _workDao.findById(work.getId()); if (work == null || work.getStep() != Step.Prepare) {