From 0aec7560bbedffad5e68c57a677a0ce6f7eb395d 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 9aa9de1ef07..b34ed482070 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -2755,6 +2755,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 3b7056ffdaf..bf48a4bc457 100755 --- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java @@ -691,6 +691,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)) { @@ -714,7 +715,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) {