From 09a97e1968c610ae5435e4df3ed279b51fc33cd9 Mon Sep 17 00:00:00 2001 From: Alena Prokharchyk Date: Mon, 16 Jun 2014 14:57:02 -0700 Subject: [PATCH] CLOUDSTACK-6919: don't attempt to restart user vms having no Root volume attached --- .../storage/StoragePoolAutomationImpl.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/server/src/com/cloud/storage/StoragePoolAutomationImpl.java b/server/src/com/cloud/storage/StoragePoolAutomationImpl.java index 8becd75ef26..8ff759df10b 100644 --- a/server/src/com/cloud/storage/StoragePoolAutomationImpl.java +++ b/server/src/com/cloud/storage/StoragePoolAutomationImpl.java @@ -23,15 +23,14 @@ import java.util.List; import javax.inject.Inject; -import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; - import org.apache.cloudstack.context.CallContext; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProviderManager; import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; +import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; @@ -362,10 +361,16 @@ public class StoragePoolAutomationImpl implements StoragePoolAutomation { // if the instance is of type user vm, call the user vm manager if (vmInstance.getType().equals(VirtualMachine.Type.User)) { UserVmVO userVm = userVmDao.findById(vmInstance.getId()); - - vmMgr.advanceStart(userVm.getUuid(), null, null); // update work queue - work.setStartedAfterMaintenance(true); - _storagePoolWorkDao.update(work.getId(), work); + // check if the vm has a root volume. If not, remove the item from the queue, the vm should be + // started only when it has at least one root volume attached to it + // don't allow to start vm that doesn't have a root volume + if (volumeDao.findByInstanceAndType(work.getId(), Volume.Type.ROOT).isEmpty()) { + _storagePoolWorkDao.remove(work.getId()); + } else { + vmMgr.advanceStart(userVm.getUuid(), null, null); + work.setStartedAfterMaintenance(true); + _storagePoolWorkDao.update(work.getId(), work); + } } return true; } catch (Exception e) {