From fdb782ffcbd612cc1b44f827087267eb43e8687a Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 10 Dec 2014 19:08:26 +0530 Subject: [PATCH] CLOUDSTACK-8014: Fix NPE searching including removed templates Steps to reproduce if you have this issue: - Create a VM's volume snapshot - Remove VM's template and mark the template as removed with timestamp in DB - Restart mgmt server and create a volume out of snapshot you should get NPE Fix: In `storagePoolHasEnoughSpace`, we're only searching for a VM's volume's snapshot's template by Id and not including removed templates. This is a corner case and NPE hits when template has been marked removed for a VM's volume's template so we should search including removed templates. Signed-off-by: Rohit Yadav (cherry picked from commit f189c105d8dde5491697b171b969e757f8f15858) Signed-off-by: Rohit Yadav --- server/src/com/cloud/storage/StorageManagerImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index e78a015d725..c603c4d70eb 100644 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -1576,8 +1576,8 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C long totalAskingSize = 0; for (Volume volume : volumes) { if (volume.getTemplateId() != null) { - VMTemplateVO tmpl = _templateDao.findById(volume.getTemplateId()); - if (tmpl.getFormat() != ImageFormat.ISO) { + VMTemplateVO tmpl = _templateDao.findByIdIncludingRemoved(volume.getTemplateId()); + if (tmpl != null && tmpl.getFormat() != ImageFormat.ISO) { allocatedSizeWithtemplate = _capacityMgr.getAllocatedPoolCapacity(poolVO, tmpl); } }